一. 开发环境
1..windows7 + VMware+Ubuntu14.04.1 LTS
2. ubuntu开发目录:/home/lct
3. 编译工具:arm-linux-gcc4.4.3,所在目录:/usr/local/arm/4.4.3/bin
4. 虚拟机网络设置
本机PC: ip:192.168.2.104 掩码:255.255.0 网关:192.168.2.1
Linux网络设置: ip:192.168.2.105 掩码:255.255.0 网关:192.168.2.255
虚拟机连接方式:bridged
二. 编译U-BOOT
1.解压: tar -zvxfu-boot-2010.12-psp03.21.00.04.mcuzone20111109.tar.gz
2. 清除之前配置:
make distcleanCROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-
3. 生成配置文件.config:
makeda850evm_configCROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-
4. 编译:make allCROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-
三.编译内核
1. u-boot编译后生成的mkimage拷贝到/bin下
2. 清除之前配置:
make distcleanARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-
3. 生成配置文件.config:
makeda850_omapl138_deconfig ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-
4.配置:make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-menuconfig-
5. 编译生成uImage:
make uImageARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-lin ux-
四.制作文件系统
交叉编译busybox:
1.解压: tar –xvf busybox-1.19.4.tar.bz2
2.配置(动态编译):make menuconfig
3.编译:make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.3/bin/arm-linux-
编译时错误:
错误一: loginutils/passwd.c:In function ‘passwd_main’:
loginutils/passwd.c:104:16: error: storage size of ‘rlimit_fsize’isn’t known
loginutils/passwd.c:188:2: warning: implicit declaration offunction ‘setrlimit’ [-Wimplicit-function-declaration]
loginutils/passwd.c:188:12: error: ‘RLIMIT_FSIZE’ undeclared(first use in this function)
loginutils/passwd.c:188:12: note: each undeclared identifier isreported>for each function it appears in
loginutils/passwd.c:104:16: warning: unused variable‘rlimit_fsize’ [-Wunused-variable]
改正:sudo gedit busybox-1.19.4/include/libbb.h添加头文件:#include
错误二:util-linux/mkfs_ext2.c:51:27: fatal error: linux/ext2_fs.h:No such file or directory
改正:出现这个错误是busybox版本导致的,只有busybox-1.19.4会出现这个问题,换成busybox-1.21.1,问题消失。
4.安装:make install
5.创建系统其他文件:
6. 拷贝编译工具链的库文件
7. 添加启动文件:etc/inittab是系统进程init的启动脚本
etc/inittab内容:
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
8. 创建fstab文件,并添加内容:这个文件是在kernel启动末尾使用的,有的自定义kernel可能直接把该mount的节点都挂载上了
etc/fstab内容:
#device mount-point type options dump fsckorder
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
9. 建立文件init.d目录,并新建rcS文件,如下
在inittab中指定,一般在嵌入式系统中inittab很简单,就是指定rcS脚本,然后打开一个登录
终端(甚至不开终端)。所以rcS脚本里应该加上你想在系统启动之初想干的事情。
etc/rcS内容:
/bin/mount –a
改变rcS权限:sudo chmod +x rcS
10. 创建profile文件:/etc/profile是用户从终端登录后,运行的脚本。如果系统不加用户登录机制,这个脚本就不会被运行了。
etc/profile内容:
export HOSTNAME=HZDL
export USER=root
export HOME=root
export PSI="[$USER@$HOSTNAME \W]\#"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
11.创建设备文件。因为根文件系统中必须有一个设备节点
mknod console c 5 1 mknod null c 1 3