从零开始搭建Linux驱动开发环境
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考:
韦东山视频第10课第一节内核启动流程分析之编译体验
第11课第三节构建根文件系统之busybox
第11课第四节构建根文件系统之构建根文件系统韦东山书籍《嵌入式linux应用开发完全手册》
其他《linux设备驱动程序》第三版
平台:
JZ2440、mini2440或TQ2440
交叉网线和miniUSB
PC机(windows系统和Vmware下的ubuntu12.04)
一、交叉编译环境的选型
具体的安装交叉编译工具,网上很多资料都有,我的那篇《arm-linux-
gcc交叉环境相关知识》也有介绍,这里我只是想提示大家:构建跟文件系统中所用到的lib库一定要是本系统Ubuntu中的交叉编译环境arm-linux-
gcc中的。即如果电脑ubuntu中的交叉编译环境为arm-linux-
二、主机、开发板和虚拟机要三者互通
w
IP v2.0》一文中有详细的操作步骤,不再赘述。
linux
2.6.22.6_jz2440.patch组合而来,具体操作:
1. 解压缩内核和其补丁包
tar xjvf linux-2.6.22.6.tar.bz2 # 解压内核
tar xjvf linux-2.6.22.6_jz2440.tar.bz2 # 解压补丁
cd linux_2.6.22.6
patch –p1 < ../linux-2.6.22.6_jz2440.patch
3. 配置
在内核目录下执行make
2410_defconfig生成配置菜单,至于怎么配置,《嵌入式linux应用开发完全手册》有详细介绍。
4. 生成uImage
make uImage
四、移植busybox
在我们的根文件系统中的/bin和/sbin目录下有各种命令的应用程序,而这些程序在嵌入式系统中都是通过busybox来构建的,每一个命令实际上都是一个指向bu sybox的链接,busybox通过传入的参数来决定进行何种命令操作。
1)配置busybox
解压busybox-1.7.0,然后进入该目录,使用make
menuconfig进行配置。这里我们这配置两项
一是在编译选项选择动态库编译,当然你也可以选择静态,不过那样构建的根文件系统会比动态编译的的大。
->Busybox Settings
->Build Options
二是在性能微调选项选择tab键补全功能。
->Busybox Settings
->Busybox library Tuning
->Command line editing
->Tab completion
其他的都是一些命令配置,如果你想使你的根文件系统具备哪些命令就选择那个命令。我选择的是默认的配置,一般基本的命令都帮你选上了。
2)编译busybox
修改Makefile,修改”ARCH ?= arm” 和”CROSS_COMPILE ?= arm-linux-
“,然后使用make命令进行编译。我在编译的过程出现如下错误:
../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:44:
error: field ‘in’ has incomplete type
解决办法:
修改arm-linux 交叉编译工具链
在 usr/local/arm/4.3.2/arm-none-linux-
gnueabi/libc/usr/include/linux/netfilter.h 头文件的开头添加缺少的头文件:#includ e
3)安装busybox
这里我们先新建一个root_fs来构建根文件系统,
[root@localhost root_fs]# ls -l
total 12
drwxr-xr-x 2 root root 4096 Oct 19 05:41 bin
lrwxrwxrwx 1 root root 11 Oct 22 11:17 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 Oct 22 18:43 sbin
drwxr-xr-x 4 root root 4096 Oct 22 16:52 usr
进入bin目录,可以看出这些文件全部是指向busybox的链接(除了busybox本身)。
[root@localhost root_fs]# ls bin -l
total 0
lrwxrwxrwx 1 root root 7 Oct 22 11:17 addgroup -> busybox
lrwxrwxrwx 1 root root 7 Oct 22 11:17 adduser -> busybox
lrwxrwxrwx 1 root root 7 Oct 22 11:17 ash -> busybox
-rwxr-xr-x 1 root root 0 Oct 23 13:20 busybox
lrwxrwxrwx 1 root root 7 Oct 22 11:17 cat -> busybox
lrwxrwxrwx 1 root root 7 Oct 22 11:17 catv -> busybox
五、安装glibc库
在root_fs下新建lib目录,再把arm-linux-
交叉编译链下的lib文件拷贝到我们root_fs下的lib目录下。我使用