如何编译单个驱动文件
2013-10-08 10:49
176 查看
你是不是经常会缺某个驱动,但是又觉得全部编译太费时间了?试试单个模块编译吧。
如果过程中提示 xxx Not found的话,那么你缺什么就apt-get来装什么(我是linaro+debian源,debian源可以参照此贴配置)。
废话少说,进入正题:
1.首先你要有全部源码,这是必须的,从github下载源码(很漫长。。)
git clone git://github.com/linux-sunxi/linux-sunxi.git
或者下载zip打包的(依然漫长..) 注意选你的内核版本对应的版本,我的是3.0.**
2013-2-16 17:02 上传
下载附件
(24.45 KB)
比如我下载到目录 /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
2013-2-16 17:14 上传
下载附件
(41.72 KB)
然后保存退出
#注意,如果你是编译其他稍微复杂一点的驱动,比如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
2013-2-16 17:21 上传
下载附件
(63.91 KB)
#-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(一般都不好解决,遇到这种情况,还是把内核和所有驱动都换了吧)
如果是报这个错:
<3>sun4i_gpio_init script_parser_fetch "gpio_para" "gpio_used" error
[ 607.040000] sun4i_gpio_init script_parser_fetch "gpio_para" "gpio_used" error
insmod: error inserting 'sun4i-gpio.ko': -1 Interrupted system call
复制代码
那是你没有设置script.bin里的gpio_para配置,设置后再insmod就OK
6.如果加载好驱动测试能够正常使用,而你每次启动系统都需要他,那么你可以把它加入到开机自加载模块里:
depmod -a
vi /etc/modules
2013-2-16 17:38 上传
下载附件
(31.85 KB)
保存退出,注意:对于某些有依赖的驱动,需要注意先后顺序哦
相关文章推荐
- 如何把单个cs文件编译成dll
- wince如何使用批处理文件进行驱动编译
- 如何将驱动编译进内核 修改Kconfig 和Makefile 文件
- xcode终于找到如何对单个文件进行编译了
- 编译单个驱动的Makefile文件。
- <Android Studio>Gradle -- 如何编译单个java文件并运行其class
- 如何把设备驱动文件添加到Linux内核编译选项配置的menuconfig中
- vs2010编译 tesseract 3.01 成功.EXE文件可以运行,但是不知道如何编译出可用的dll
- 如何查看Class文件编译的JDK版本
- 如何在 mdk(keil) 编译成 *.bin 文件
- C/C++程序编译步骤 如何生成可执行文件
- 如何把自己的驱动编译进内核或模块 .
- 驱动开发中,如何自动创建设备文件?
- iOS项目如何新建预编译pch文件
- g++如何编译多个原文件和头文件
- [MinGW]_[初级]_[64位的windres如何编译出32位的链接文件]
- 如何把.cs文件编译为.dll文件
- 如何添加一个 mingw gcc 编译的可执行文件的图标?
- Ubuntu系统下如何编译:.c文件为可执行文件
- 如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?