驱动调试前期准备工作

本文详细介绍了在开发板上编写驱动程序并使其成功运行的过程,包括内核配置、驱动文件编写、编译与加载模块,以及通过NFS挂载进行调试的方法。同时,演示了应用程序的开发与动态链接库的复制过程,最终实现helloworld程序在开发板上的成功运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发板上编写一个简易的驱动看看能不能成功。

因为内核编译的时候已经选择了,支持模块加载。

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 worldC程序运行看看。

使用交叉编译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

运行成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值