一. 開發環境
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 <sys/resource.h>
錯誤二: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