现在的位置: 首页 > 综合 > 正文

加载驱动模块遇到的问题

2018年09月07日 ⁄ 综合 ⁄ 共 1091字 ⁄ 字号 评论关闭

问题1:

# insmod hello_world.ko

hello init!
# ./hello_test
./hello_test: line 1: syntax error: "(" unexpected

答案:原来是因为编译器的原因啊,我用的是系统下的gcc而不是arm-linux-gnu-gcc!

问题2;使用静态方式申请主设备号,没有用mkmod创建,但是却会有hello这个设备节点?

答案:使用的那个系统里面登陆的时候就有那个hello的设备,现在暂时还不清楚在哪里创建了。 巧合的是驱动中写的设备名字也叫hello,故加载驱动后,即使没有手动创建设备节点,运行测试程序时也仍然会成功,因为/dev/hello设备是存在的。如果改了我们写的小驱动的名字为hello123,应用程序打开的设备也为/dev/hello123,那么如果不创建设备节点,就不会有/dev/hello123

相关知识:

/*静态方式申请主设备号*/
//register_chrdev(hello_major, "hello", &hello_fops);
/*动态申请主设备号*/
hello_major =register_chrdev(0, "hello",  &hello_fops);

/*.自动创建设备节点*/
/*首先要创建一个类,为vfs构建一些信息,mdev这个根据这些信息帮我们
创建一个设备节点*/
hello_class =class_create(THIS_MODULE, "hello_class");

1.手动创建
mknod /dev/hello c 252 0

以这种方式来创建的话,

2.自动创建
class_create
class_device_create

问题3:

加载驱动模块时出现,而我所做的仅仅是改了驱动注册时的名字,把hello改成hello123,后来就出现这个问题,改回来也还是这样

hello_world: version magic '2.6.22.6 mod_unload ARMv5 ' should be '2.6.22.6 mod_unload ARMv4 '

答案:make distclean 然后重新配置编译内核,重新编译驱动就好了。具体原因,尚不清楚。

问题4:

make menuconfig 的时候出现错误:

Your display is too small to run Menuconfig!

It must be at least 19 lines by 80 columns.

make[1]: *** [menuconfig] 错误 1

答案:设置下,在终端下,点击右键->配置文件->配置文件首选项->默认尺寸,改变一下这个默认尺寸,使其变得很大即可,比如我设置成1024.

抱歉!评论已关闭.