2015-12-13 5 views
3

Я пытаюсь добавить некоторые вещи в Linux task_struct.Как отлаживать в режиме ядра с помощью printk

В этой области я копирую строку из пользователя и пытаюсь сохранить ее в моей структуре.

Я пытаюсь отладить мой код, добавив printk, который напечатает скопированную строку.

это часть отладки кода:

newTODO->TODO_description=(char*)(kmalloc(in_description_size+1,0)); 
    if(newTODO->TODO_description){ 
     kfree(newTODO); 
     return -1; 
    } 

    res=copy_from_user(newTODO->TODO_description, in_TODO_description, in_description_size); 
     if (res)        // error copying from user space, 1 or more char werent copied. 
     { 
      printk(KERN_ALERT "function: create element failed to copy from user\n"); 
      return -EFAULT; 
     } 
    newTODO->TODO_description[in_description_size]='\o'; 
    printk(KERN_ALERT "the copied string is: %s \n",newTODO->TODO_description); 

сусло inportent печати для меня

printk(KERN_ALERT "the copied string is: %s \n",newTODO->TODO_description); 

будет работать?

понять printk:

, когда я буду работать мой тестовый файл с терминала всякий раз, когда printk будет вызван он напечатает выход прямо на рабочий терминал?

+3

Использование 'dmesg', чтобы увидеть журнал ядра. –

+0

'= '\ o';' смотрит подозрения. Вы имели в виду '= '\ 0';' (или просто '= 0;') – nos

ответ

1

Функция printk добавит сообщение в буфер сообщений ядра, но содержимое этого буфера НЕ будет отображаться на терминале, если вы не дадите команду.

Как говорит Илья Матвейчиков, вы можете использовать команду «dmesg» для сброса буфера сообщений ядра.

или используйте следующие команды для получения наблюдения за ядром ядра в реальном времени.

эхо 8>/Труды/SYS/ядро ​​/ printk
хвост -f /var/log/kern.log &

или

кота/Proc/kmsg & (Android Environment)