[教程]如何编译单个驱动文件

你是否是常常会缺某个驱动,可是又以为所有编译太费时间了?试试单个模块编译吧。
若是过程当中提示 xxx Not found的话,那么你缺什么就apt-get来装什么(我是linaro+debian源,debian源能够参照此贴配置)。
废话少说,进入正题:
1.首先你要有所有源码,这是必须的,从github下载源码(很漫长。。)
git clone git://github.com/linux-sunxi/linux-sunxi.git
或者下载zip打包的(依然漫长..) 注意选你的内核版本对应的版本,个人是3.0.**
未命名.jpg 

好比我下载到目录 /home/lany/workspace/linux-sunxi
若是是交叉编译,请先执行:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-


2.  进入这个目录,建立配置文件,cubieboard可使用 sun4i_defconfig 这个配置
cd /home/lany/workspace/linux-sunxi
make sun4i_defconfig 


生成了默认配置的.config以后,你再去.config里把你要的驱动的配置项给开启(能够vi直接编辑.config或者使用make menuconfig图像界面来配置),我这里以sun4i_gpio这个驱动作列子:
vi ./.config
/GPIO
  #按/键 输入GPIO 回车 (即搜索GPIO这个词语)
将你找到的GPIO配置那一行改成CONFIG_SUN4I_GPIO_UGLY=m  
未命名.jpg 
而后保存退出
#注意,若是你是编译其余稍微复杂一点的驱动,好比gpu里的几个驱动,他们存在依赖关系,建议使用make menuconfig来配置

3.保存以后,让他准备一下:
make prepare 
make scripts


4.如今咱们进入要编译的驱动的源码目录,好比sun4i-gpio.c在 drivers/misc 目录下:
cd  /home/lany/workspace/linux-sunxi/drivers/misc/
make -C /home/lany/workspace/linux-sunxi/ M=`pwd` modules

未命名.jpg 
#-C后面是你下载的内核源码的目录 M=`pwd` 表示指定要编译的模块目录为当前目录
先看看编译出来的驱动的版本是否和你系统相同,若是不相同是没法使用的:
modinfo /home/lany/workspace/linux-sunxi/drivers/misc/sun4i-gpio.ko
输出:
filename:       /home/lany/workspace/linux-sunxi/drivers/misc/sun4i-gpio.ko
license:        GPL
author:         Tom Cubie
description:    a simple sun4i_gpio driver
depends:
vermagic:       3.0.57+ mod_unload modversions ARMv7

能够看到版本是3.0.57+ mod_unload modversions ARMv7,个人系统版本就是3.0.57+,若是不是,你须要将源码checkout到你对应的版本的分支再编译,或者直接完整编译,把系统内核uImage换成新的(不过这样你的其余驱动都得换)
若是3.0.57+和mod_unload之间还有其余字符,你就要看看你系统里正在使用的其余驱动是否是也有这个字符,若是对不上是没法使用的。

5.若是没问题,那么直接将sun4i-gpio.ko复制到/lib/modules/(你的内核版本)/kernel/drivers/misc/ 下 (即该驱动应该在的位置,而不是全部驱动都往这里放哦)
而后insmod /lib/modules/(你的内核版本)/kernel/drivers/misc/sun4i-gpio.ko
若是没有报错,那么恭喜你,已经加载成功,可使用命令:lsmod 查看。若是有报错,输入命令:dmesg|tail   查看详细的报错信息。而后再去google(通常都很差解决,遇到这种状况,仍是把内核和全部驱动都换了吧)
若是是报这个错:php

  1. <3>sun4i_gpio_init script_parser_fetch "gpio_para" "gpio_used" error
    linux

  2. [  607.040000] sun4i_gpio_init script_parser_fetch "gpio_para" "gpio_used" error
    git

  3. insmod: error inserting 'sun4i-gpio.ko': -1 Interrupted system callgithub

复制代码测试

那是你没有设置script.bin里的gpio_para配置,设置后再insmod就OK


6.若是加载好驱动测试可以正常使用,而你每次启动系统都须要他,那么你能够把它加入到开机自加载模块里:
depmod -a
vi /etc/modules
未命名.jpg 
保存退出,注意:对于某些有依赖的驱动,须要注意前后顺序哦

教程完毕。祝你们折腾愉快~fetch


原文做者:WindLand
原文连接:http://forum.cubietech.com/forum ... st%3D1%26digest%3D1
google

相关文章
相关标签/搜索