本文共 1386 字,大约阅读时间需要 4 分钟。
在开发板上编写一个简易的驱动看看能不能成功。
因为内核编译的时候已经选择了,支持模块加载。
Test.c
#include <linux/init.h>
#include <linux/module.h>
Static __int void test_init(void)
{
Printk(“test_init\n”);
}
Static __exit void test_exit(void)
{
Printk(“testexit\n”);
}
Makefile
Obj-m := test.o
编译makeARCH=arm CROSS_COMPILE=/home/zhangshaoyan/arm-eabi-4.4.0/bin/arm-eabi- M=/home/zhangshaoyan/drivers/testmodules
编译后生成了一个test.ko
因为我使用的NFS挂载的,这样调试比较方便。
/zhangshaoyan # insmod test.ko
hello init
sys_init_module: 'test'->initsuspiciously returned 14, it should follow 0/-E co
nvention
sys_init_module: loading module anyway...
[<80032578>](unwind_backtrace+0x0/0xf0) from [<800801fc>] (sys_init_module+0x10
0/0x1ac)
[<800801fc>](sys_init_module+0x100/0x1ac) from [<8002df80>] (ret_fast_syscall+0
x0/0x30)
怎么打印出这么多东东来?好像是sysfs给整出来的。先不管了。最起码能工作。
/ # lsmod
test 528 0 - Live 0x7f006000
使用lsmod发现只装载了一个模块就我这个哈哈。
/ # rmmod test
rmmod: chdir(2.6.35.3):No such file or directory
卸载不了了啊。从网上一查,原来需要建立相应的目录啊。
/ # rmmod test
rmmod: chdir(2.6.35.3):No such file or directory
/ # mkdir /lib/modules/2.6.35.3
/ # rmmod test
hello exit
/ #
看来驱动初步环境可以了,可以写驱动了。
在看一下应用程序的开发,看看写个hello world的C程序运行看看。
使用交叉编译arm-linux-gcchello.c编译成功了。
应该是动态编译,还需要将其需要的库拷贝到开发板上,直接拷贝交叉编译工具里的库就行。
将/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib目录下所有的.so库拷贝到开发板的/lib下。在开发板上运行刚才的程序。
/zhangshaoyan # ls
a.out hello.c
/zhangshaoyan # ./a.out
hello world i.mx53 haha
运行成功。
转载地址:http://vjzji.baihongyu.com/