第一个驱动程序(在开发板上运行)

本文记录将之前在台式机上运行的驱动程序移植到开发板上的过程

  • 搭建交叉编译环境,解压工具链
    这里写图片描述

  • 修改环境变量
    /etc/profile是整个系统所有用户的环境初始化文件,如果需要root用户能够执行的话,需要修改这个文件
    这里写图片描述

  • linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax
    解决方案:
    ref:http://www.cnblogs.com/lovechen/p/5717322.html

  • 加载环境变量,可能需要重启系统才能生效

source /etc/profile
  • 查看下PATH是否包含新增的交叉编译器路径
echo $PATH

因为我的Ubuntu是64位的,要下一个32位的库

sudo apt-get install lib32ncurses5
  • 编译嵌入式内核,生成模块
    在编译好的内核文件路径下,输入
make modules ARCH=arm  CROSS_COMPILE=arm-linux-

(可以直接修改makefile文件)编译模块。
再输入

make modules_install

加载内核,用来解决/lib/modules/下无目标板内核版本文件夹及build文件的问题,也可以

make modules_install INSTALL_MOD_PATH=/指定模块安装路径
  • 在自己编写好的模块文件Makefile中修改以下内容:
    KDIR :=/lib/modules/2.6.22.6/build(此处为刚刚运行make modules_install 新生成的文件,与目标板内核版本一致)
    因为开发板是arm系统,还需要用到交叉编译器,在Makefile中添加以下内容:
make -C $(KDIR) M=$(PWD) modules
ARCH:= arm CROSS_COMPILE:= /home/ubuntu/tools/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-(路径根据自己的安装路径更改)
  • 在虚拟机上查看/etc/exports,确认NFS共享文件夹
    在开发板终端输入
mount -t nfs -o nolock 192.168.1.152:/home/ubuntu/nfs_root  /mnt

注:192.168.1.152是虚拟机的IP地址。
当你用以上命令将开发板/mnt目录里的文件拷贝出来时,可能会很慢,然后还会报这样的错“NFS:server not responing ,still trying”
应该使用这样的挂载命令

mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.152:/home/ubuntu/nfs_root /mnt

这时拷贝就正常了。

  • 在开发板终端上插入新的模块
insmod xxx.ko

我在加载模块时,提示内核错误
这里写图片描述
由“Unable to handle kernel NULL pointer dereference at virtual address 00000000”可知内核是因为非法地址访问出错,使用了空指针。
栈回溯信息:
这里写图片描述
本来以为是内核烧写的问题,后来重新烧写了内核和文件系统,在加载模块时依旧报段错误,但是不影响驱动的使用,就暂且不管了。
最后在开发板上运行的结果如下:
这里写图片描述
能够正确打开设备进行写操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值