当前位置: 技术问答>linux和unix
调试驱动时候,经常跳出来undefined、、、????
来源: 互联网 发布时间:2016-05-22
本文导语: 头文件应该全了: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //++,fire #include #include "serial_vk3233.h" 声明也有了: extern int uart_register...
头文件应该全了:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //++,fire
#include
#include "serial_vk3233.h"
声明也有了:
extern int uart_register_driver(struct uart_driver *drv);
extern void uart_write_wakeup(struct uart_port *port);
extern void uart_unregister_driver(struct uart_driver *drv);
具体使用:
static int __init vk3233_serial_init(void)
{
vk3233_init_ports();
printk(KERN_ALERT "vk3233_serial_init()n");
return uart_register_driver(&vk3233_reg);
}
static void __exit vk3233_serial_exit(void)
{
uart_unregister_driver(&vk3233_reg);
printk(KERN_ALERT "EXIT VK3233n");
vk3233_write_reg(0,VK3233_GCR,0x40);
}
uart_register_driver(),uart_unregister_driver undefined()这两个函数在工程另外一个文件中定义了!!
调试时候,经常提示uart_register_driver,uart_unregister_driver undefined、、、、、
为什么啊???
有人能不能给指点一下、、、??
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //++,fire
#include
#include "serial_vk3233.h"
声明也有了:
extern int uart_register_driver(struct uart_driver *drv);
extern void uart_write_wakeup(struct uart_port *port);
extern void uart_unregister_driver(struct uart_driver *drv);
具体使用:
static int __init vk3233_serial_init(void)
{
vk3233_init_ports();
printk(KERN_ALERT "vk3233_serial_init()n");
return uart_register_driver(&vk3233_reg);
}
static void __exit vk3233_serial_exit(void)
{
uart_unregister_driver(&vk3233_reg);
printk(KERN_ALERT "EXIT VK3233n");
vk3233_write_reg(0,VK3233_GCR,0x40);
}
uart_register_driver(),uart_unregister_driver undefined()这两个函数在工程另外一个文件中定义了!!
调试时候,经常提示uart_register_driver,uart_unregister_driver undefined、、、、、
为什么啊???
有人能不能给指点一下、、、??
|
uart_register_driver(),uart_unregister_driver undefined()这两个函数在工程另外一个文件中定义了
!!
调试时候,经常提示uart_register_driver,uart_unregister_driver undefined、、、、、
=================================================================================================
把這個兩個函數實現體所在的文件編譯的時候也需要加上 -g 的選項才行
!!
调试时候,经常提示uart_register_driver,uart_unregister_driver undefined、、、、、
=================================================================================================
把這個兩個函數實現體所在的文件編譯的時候也需要加上 -g 的選項才行
|
uart_register_driver(),uart_unregister_driver undefined()这两个函数在工程另外一个文件中定义了!!
调试时候,经常提示uart_register_driver,uart_unregister_driver undefined、、、、、
你把它们的头文件直接包含在这里试试。
调试时候,经常提示uart_register_driver,uart_unregister_driver undefined、、、、、
你把它们的头文件直接包含在这里试试。
|
能夠支持調試的,必須要生成的目標文件里面有調試信息才行!你那兩個函數裡面沒有調試信息,自然在調試的
時候會報錯了。解決的辦法就是,你先把那兩個函數所在的.c文件,在編譯成.o的時候,加上調試選項,就是上
面說的-g,然後多個.o連接生成可執行程序的時候,裡面才能有那兩個函數的調試信息,否則是沒有的。
不過,如果那兩個函數所在的是庫,而你又沒有庫的源碼,那基本上就沒希望了,在gdb裡面調試,至多能看到反
彙編代碼而已
時候會報錯了。解決的辦法就是,你先把那兩個函數所在的.c文件,在編譯成.o的時候,加上調試選項,就是上
面說的-g,然後多個.o連接生成可執行程序的時候,裡面才能有那兩個函數的調試信息,否則是沒有的。
不過,如果那兩個函數所在的是庫,而你又沒有庫的源碼,那基本上就沒希望了,在gdb裡面調試,至多能看到反
彙編代碼而已
|
另外的工程里的定义函数下面要加:
EXPORT_SYMBOL(uart_register_driver);
EXPORT_SYMBOL(uart_write_wakeup);
EXPORT_SYMBO(uart_unregister_driver);
Makefile要加
-DEXPORT_SYMTAB
参数
EXPORT_SYMBOL(uart_register_driver);
EXPORT_SYMBOL(uart_write_wakeup);
EXPORT_SYMBO(uart_unregister_driver);
Makefile要加
-DEXPORT_SYMTAB
参数
|
很好奇你是怎么调试内核驱动的?
|
cat Linux/.config | grep CONFIG_SERIAL_VK3233
看看你的CONFIG_SERIAL_VK3233是不是选上了
看看你的CONFIG_SERIAL_VK3233是不是选上了