一、前面的工作:
(1)从头移植3.4.2内核,修改分区,制作jffs2文件系统
http://blog.csdn.net/fengyuwuzu0519/article/details/69802922
(2)修改内核支持yffs2、制作yffs2文件系统、内核裁剪、制作补丁
http://blog.csdn.net/fengyuwuzu0519/article/details/70162666
(3)移植内核支持DM9000C网卡驱动(可以使用mount nfs)、支持三路串口
http://blog.csdn.net/fengyuwuzu0519/article/details/72846205
到此我们移植的内核,已经基本完整,并且包含了网卡驱动,但是驱动还是太少,现在我们把之前写好的2.6.22的驱动,移植到linux3.4.2之中来,扩大系统的驱动。
接下来的工作:
内核升级很多,有很多头文件会被删除,或者某些宏改名或不在使用,导致驱动中的一些头文件不再有效,一些函数无法按以前那样使用,所以我们修改驱动程序的时候,主要是解决内核升级带来的函数变化。因为驱动的编译,依赖于内核。
二、移植linux2.26LED、按键等驱动到3.4.2内核
1、驱动在内核间的移植方法
- 1. 编译
- 2. 解决错误
- 2.1 头文件不对:去掉或改名
- 2.2 宏不对:改名使用新宏
- 2.3 有些函数没有了:改名使用新函数
2、移植过程
(1)移植LED驱动
更新内核中的内核目录,需要提前编译此内核目录
直接make,看看有哪些错误
一些头文件不存在了,那就直接去掉看看
再次编译
class_create声明有问题,那就看看内核其他驱动怎么使用这个函数
应该是缺少头 文件,包含一下:
再次编译
发现这个函数是黑色,应该是不再使用这个函数了,那么搜索class_create看看
函数名字改成:device_create
出口函数改名为:device_destroy(firstdrv_class, MKDEV(major, 0));
编译通过,复制到单板
加载驱动
到此LED驱动移植成果。
(2)移植按键驱动
修改makefile后直接make
加入以上头文件
引脚申明没有了
.
看看在哪个函数用了,内核搜索
如下给出解决方法
继续编译
.
这个展开后有这个变量,应该是某些头没包含。
缺少头文件,看看别人怎么使用这个函数的
继续编译
搜索request_irq怎么使用
宏的名字改变了搜索这个函数怎么用
好多驱动类似,我们可以通过对比软件来修改:
继续编译:
卸载出错:
函数的参数变了
卸载驱动前 先杀死使用它的应用程序。
ps
kill -9 pid