Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

470
Views
¿Cómo son útiles las funciones de la familia dev_*() al depurar el kernel de Linux?

Mientras busca técnicas para depurar un kernel de Linux, una de las formas es usar las funciones de la familia dev_*() .

Estas funciones se definen en el archivo /include/linux/device.h .

La lista de funciones es la siguiente:

 `dev_emerge()`<br> `dev_alert()`<br> `dev_crit()`<br> `dev_err()`<br> `dev_warning()`<br> `dev_notice()`<br> `dev_info()`<br>

Ya he experimentado con las funciones de la familia pr_*() [ pr_emerge() , pr_alert() , pr_crit() ...], que son similares a printk() de alguna manera.

Se realiza un experimento utilizando módulos de kernel simples donde estoy llamando a estas funciones. Además, también he revisado la prioridad de los mensajes que se muestran en syslog y dmesg (el búfer de anillo del kernel depende de la variable del kernel console_loglevel-a).

Pero no puedo entender el uso de la familia dev_*() . Quiero decir, ¿cómo lo uso en un programa para depurar la funcionalidad del kernel?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Las funciones pr_*() son las mismas que printk() simple, pero con el nivel de registro KERN_xxx ya incluido.

Las funciones dev_*() son las mismas que las funciones pr_*() , pero también imprimen información de identificación sobre el struct device .

Si su mensaje está relacionado con algún dispositivo (que normalmente es el caso de los controladores), debe usar dev_*() . Por ejemplo, en un controlador USB:

 struct usb_device *usb_dev; dev_info(&usb_dev->dev, "hello\n"); struct usb_interface *usb_intf; dev_info(&usb_intf->dev, "hello\n");

o en un controlador PCI:

 struct pci_dev *pci; dev_info(&pci->dev, "hello\n");
over 4 years ago · Santiago Trujillo Report

0

Las funciones dev_* son similares a pr_* , pero también imprimen información sobre el dispositivo ( struct device ), que se les pasa como primer argumento. Esta información puede ayudar a filtrar el registro del sistema en busca de mensajes pertenecientes a un dispositivo concreto.

Por lo tanto, puede usar la función dev_* en lugar de pr_* siempre que el mensaje sea aplicable a un dispositivo concreto (y tenga un destripador).

over 4 years ago · Santiago Trujillo Report

0

Comprueba lo que imprime tú mismo con QEMU

Esto es lo que imprime para un dispositivo PCI:

 <6>lkmc_pci 0000:00:04.0: pci_probe

que es de formato:

 <level><kernel-module> <pci-address>: <message>

Entonces, como dijeron otros, brinda información adicional del dispositivo en comparación con un simple printk , a saber:

  • nombre del módulo del núcleo
  • dirección PCI

Lo probé con el dispositivo "edu" de QEMU, que es un dispositivo PCI educativo simple, para el cual escribí un módulo mínimo del kernel de Linux .

El código del módulo clave es:

 static int pci_probe(struct pci_dev *dev, const struct pci_device_id *id) { dev_info(&(dev->dev), "pci_probe\n");

Aparentemente, los dispositivos de caracteres no exponen un struct device , por lo que no puede probarlo de esa manera: ¿Cómo se obtiene un dispositivo de estructura para un dispositivo de caracteres de Linux?

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!