打印

编译内核到自己的驱动开发过程

[复制链接]
184|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
你画我瞎|  楼主 | 2018-9-29 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先注意要加载驱动的重要的前提一定要编译内核,没有编译过的内核是没有办法生成.ko的文件的,但是遇到的问题是,内核编译的版本要与开发板的版本一致,并且要打上补丁文件,这个在韦东山的光盘里面有linux-2.6.22.6_jz2440.patc0这个文件,把他放在自己的linux-2.6.22.6目录下面执行patch -p1 <../linux-2.6.22.6_jz2440.patch就行了,我的linux-2.6.22.6在目录 /work/system下面然后就是makes3c2410_defconfig---àmake uImage但是这个uImage是jz2440开发板的会导致我的mini2440蜂鸣器响,所以把韦东山的lcd.c,复制到linux-2.6.22.6/drivers/video中去修改为

#//obj-$(CONFIG_FB_S3C2410)      += s3c2410fb.o

obj-$(CONFIG_FB_S3C2410)         += lcd.o



然后编译一遍内核就能用了 用make uImage去编译,这个内核下载到开发板就能加载上驱动了(这就是我找到的无法insmod 的原因)



以上的步骤就达到了将将虚拟机中的内核和开发板的内核变成一样的效果





1、 首先是要编译linux为自己能用的内核,在这里我们用的是mini2440,是所以需要编译内核,其中arch目录下的arm架构是我们要用到的

2、 把/work/system这个文件夹下面有,利用把tar–xzf  linux-2.6.22.6.tar.bz2他解压到当前文件夹生成linux-2.6.22.6文件夹

3、 然后进入文件夹修改顶层的Makfile,用sudo viMakefile,修改ARCH            ?=arm  (这个对应的是第一步中的编译内核用到的是arm开发平台)

CROSS_COMPILE ?=arm-linux-(这个对应的是编译器的型号)

有了这两步就能直接指定编译器编译出arm平台的内核了(因为linux内核中包含了众多的平台)



4、 我们可以看到linux-2.6.22.6/arch/arm/configs#这个文件夹下面有s3c2410_defconfig这个配置文件,直接记下这个名字,回到根目录/work/system/linux-2.6.22.6#下执行 makes3c2410_defconfig就能生成.config配置文件了

5、 然后就是使用make menuconfig来具体配置它了,如果配置好了就用makeuImage生成内核可以供s3c2410直接使用了。但是不能用于s3c2440,这个uImage在/work/system/linux-2.6.22.6/arch/arm/boot下面

6、 这里要修改时钟的频率了,但是这样只保证串口输出的不是乱码,并不能保证内核本身没有错误,那么就要进一步去修改这个内核然后再make uImaeg

重要的驱动编译查询lsmod

lnsmod xyz.ko加载驱动

Mknod /dev/xyz c 2520添加设备节点

rmmod xyz卸载驱动

ls /dev/xyz –l 查看驱动设备详细信息

lsmod 查看已经加载的所有 的驱动

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝