05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

一、前面的工作:

(1)从头移植3.4.2内核,修改分区,制作jffs2文件系统

http://blog.****.net/fengyuwuzu0519/article/details/69802922

(2)修改内核支持yffs2、制作yffs2文件系统、内核裁剪、制作补丁

http://blog.****.net/fengyuwuzu0519/article/details/70162666

(3)移植内核支持DM9000C网卡驱动(可以使用mount nfs)、支持三路串口

http://blog.****.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驱动
更新内核中的内核目录,需要提前编译此内核目录
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
直接make,看看有哪些错误
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
一些头文件不存在了,那就直接去掉看看
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
再次编译

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
class_create声明有问题,那就看看内核其他驱动怎么使用这个函数
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
应该是缺少头 文件,包含一下:
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

再次编译
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
发现这个函数是黑色,应该是不再使用这个函数了,那么搜索class_create看看
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

函数名字改成:device_create
出口函数改名为:device_destroy(firstdrv_class,  MKDEV(major, 0));
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

编译通过,复制到单板
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

加载驱动
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

到此LED驱动移植成果。
(2)移植按键驱动
修改makefile后直接make
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
加入以上头文件
引脚申明没有了
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
.
看看在哪个函数用了,内核搜索
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
如下给出解决方法
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

继续编译
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动.

这个展开后有这个变量,应该是某些头没包含。
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

缺少头文件,看看别人怎么使用这个函数的

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

继续编译

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

搜索request_irq怎么使用

宏的名字改变了搜索这个函数怎么用

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动


好多驱动类似,我们可以通过对比软件来修改:
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动


继续编译:
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

卸载出错:
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

函数的参数变了

05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动

卸载驱动前 先杀死使用它的应用程序。

ps

kill -9 pid