一、sd啟動
將u-boot鏡像寫入SD卡,將SD卡通過讀卡器接上電腦(或直接插入筆記本卡槽),通過"cat /proc/partitions"找出SD卡對應的設備,我的設備節點是/dev/sdb.(內存卡的節點)。
當有多個交叉編譯器是,不方便設置環境變量時,可以在編譯命令中指定交叉編譯器,具體如下:在源碼中操作以下步驟:
make distclean
make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- mrproper
make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_config
make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl
編譯出tiny210-uboot.bin,注意交叉編譯工具路徑
執行下面的命令
$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1
把內存卡插入開發板,使用串口工具設置環境變量:
setenv gatewayip 192.168.1.1 (電腦網關)
setenv ipaddr 192.168.1.102 (開發板ip,不要與虛擬機和電腦ip沖突)
setenv netmask 255.255.255.0
setenv serverip 192.168.1.10 (虛擬機ip)
saveenv
二、nand啟動
燒寫Uboot:
通過SD卡啟動的u-boot for tiny210 將u-boot鏡像寫入nandflash
在虛擬機下重啟tftp sudo service tftpd-hpa restart
開發板終端下執行下面的命令:
[FriendlyLEG-TINY210]# tftp 21000000 tiny210-uboot.bin
[FriendlyLEG-TINY210]# nand erase.chip
[FriendlyLEG-TINY210]# nand write 21000000 0 3c1f4 (寫入長度)
內核的燒寫位置是0x600000開始的區域,文件系統燒寫位置為0xe00000開始的區域。
三、燒寫內核:
重新設置環境變量:
setenv gatewayip 192.168.1.1 (電腦網關)
setenv ipaddr 192.168.1.102 (開發板ip,不要與虛擬機和電腦ip沖突)
setenv netmask 255.255.255.0
setenv serverip 192.168.1.10 (虛擬機ip)
saveenv
在/svn/linux-3.0.8 源碼目錄下make uImage,將uImage拷貝到tftp目錄下
[FriendlyLEG-TINY210]#tftp 21000000 uImage //下載文件到內存
[FriendlyLEG-TINY210]#nand erase 600000 f200000 //擦寫相應的nand
[FriendlyLEG-TINY210]#nand write 21000000 600000 b03c280(寫入長度) //寫到nand
TFTP服務器配置:
sudo apt-get install xinetd
sudo apt-get install tftp-hpa tftpd-hpa
配置:
1: 在/etc/xinetd.d/目錄下創建tftp配置文件
2: touch /etc/xinetd.d/tftp
3:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
4: 創建tftp下載目錄:
mkdir -p /var/tftpboot/
sudo chmod 777 /var/tftpboot
echo “iloveyou” >> /var/tftpboot/demo
測試:
tftp localhost
tftp 127.0.0.1
> get demo
> quit
四、啟動參數
設置bootargs參數
1:如果用yaffs2文件系統
setenv bootargs noinitrd root=/dev/mtdblock4 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M
設置自啟動參數bootcmd
setenv bootcmd nand read 21000000 80000 (nand起始地址)22e800 (nand寫入長度)\; bootm 21000000
燒寫命令如下:
[FriendlyLEG-TINY210]#tftp 21000000 rootfs_android.img //下載文件到內存
[FriendlyLEG-TINY210]#nand erase e00000 f200000 //擦寫相應的nand
[FriendlyLEG-TINY210]#nand write.yaffs 21000000 e00000 b03c280 //寫到nand
記住yaffs鏡像是包含OOB數據的,所以寫入NAND Flash的數據長度應該是2112(=2048 + 64)字節的整數倍。
2:如果用NFS燒寫文件系統
setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.10(虛擬機ip):/home/xyp/nfsroot/rootfs ip=192.168.1.102(開發板ip):192.168.1.10(虛擬機ip):192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200 init=/linuxrc
Setenv bootcmd nand read 21000000 600000 20b334 \; bootm 21000000
Saveenv
2.1 nfs配置
Sudo apt-get install nfs-kernel-server 配置nfs
Sudo vi /etc/exports添加/home/ly/nfs *(rw,sync,no_root_squash)
重啟nfs服務,使配置生效:sudo /etc/init.d/nfs-kernel-server restart
2、構建根文件按系統
2.1、建立根文件系統目錄
在/home/ly下創建目錄system,新建建立根文件系統目錄的腳本文件 create_rootfs_bash,使用命令sudo chmod +x create_rootfs_bash改變文件的可執行權限,./create_rootfs_bash運行腳本,就完成了根文件系統目錄的創建。
文件系統目錄腳本文件:
#!/bin/sh
echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home usr
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"
2.2建立動態鏈接庫
動態鏈接庫直接用友善之臂的,先解壓友善之臂的根文件包,拷貝lib的內容到新 建的根文件目錄lib內。
cd /opt/studyarm (壓縮包存放位置)
tar –zxvf root_qtopia.tgz –C /opt/studyarm (輸出目錄)
cp –rf /opt/studyarm/root_qtopia/lib/* /home/ly/system/rootfs/lib/
2.3交叉編譯Bosybox
Bosybox是一個遵循GPLv2協議的開源項目,它在編寫過程總對文件大小進行優化,並考慮了系統資源有限(比如內存等)的情況,使用Busybox可以自動生成根文件系統所需的bin、sbin、usr目錄和linuxrc文件。
1、解壓busybox
cd /mnt/hgfs/share (壓縮包存放位置)
tar –zxvf busybox-1.13.3.tar.tgz –C /opt/studyarm (輸出目錄)
2、進入源碼,修改Makefile文件:
cd /opt/studyarm/busybox-1.13.3
修改:
CROSS_COMPILE ?=arm-linux- //第164行
ARCH ?=arm //第189行
3、配置busybox
輸入make menuconfig進行配置
(1)、Busybox Settings--->
General Configuration--->
[*] Show verbose applet usage messages
[*] Store applet usage messages in compressed form
[*] Support –install [-s] to install applet links at runtime
[*] Enable locale support(system needs locale for this to work)
[*] Support for –long-options
[*] Use the devpts filesystem for unix98 PTYs
[*] Support writing pidfiles
[*] Runtime SUID/SGID configuration via /etc/busybox.config
[*] Suppress warning message if /etc/busybox.conf is not readable
Build Options--->
[*] Build BusyBox as a static binary(no shared libs)
[*] Build with Large File Support(for accessing files>2GB)
Installation Options->
[]Don’t use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
(1024)Maximum length of input
[*] vi-style line editing commands
(15) History size
[*] History saving
[*] Tab completion
[*]Fancy shell prompts
(4) Copy buffer size ,in kilobytes
[*]Use ioctl names rather than hex values in error messages
[*]Support infiniband HW
(2)、Linux Module Utilities--->
(/lib/modules)Default directory containing modules
(modules.dep)Default name of modules.dep
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
-----options common to multiple modutils
[ ] support version 2.2/2.4 Linux kernels
[*]Support tainted module checking with new kernels
[*]Support for module .aliases file
[*] support for modules.symbols file
如果出現錯誤,直接找到相應的函數,取消該選項,在make menuconfig下用/查找,空格鍵添加/取消選項內容。
4、在busybox中配置對dev下設備類型的支持
mdev是busybox自帶的一個簡化版的udev,適合於嵌入式的應用埸合。其具有使用簡單的特點。它的作用,就是在系統啟動和熱插拔或動態加載驅動程序時,自動產生驅動程序所需的節點文件。在以busybox為基礎構建嵌入式linux的根文件系統時,使用它是最優的選擇。下面的選項將增加對mdev的支持。
Linux System Utilities --->
[*]Support /etc/mdev.conf
[*]Support command execution at device addition/removal
5、編譯busybox
編譯busybox到指定目錄:
cd /opt/studyarm/busybox-1.13.3
make CONFIG_PREFIX=/home/ly/system/rootfs install
在rootfs目錄下會生成目錄bin、sbin、usr和文件linuxrc的內容。
6、建立etc目錄下的配置文件
1、etc/mdev.conf文件,內容為空。
2、拷貝主機etc目錄下的passwd、group、shadow文件到rootfs/etc 目錄下。
3、etc/sysconfig目錄下新建文件HOSTNAME,內容為”LYliyan”。
4、etc/inittab文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
7、etc/init.d/rcS文件:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "*************************************"
echo "****************Studying ARM*********************"
echo "Kernel version:linux-2.6.29.1"
echo "Student:Feng dong rui"
echo "Date:2009.07.15"
echo "******************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME
使用以下命令改變rcS的執行權限:
sudo chmod +x rcS
8、etc/fstab文件:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
mdev /dev ramfs defaults 0 0
9、 etc/profile文件:
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[\u@\h=W]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
10、制作根文件系統映像文件
使用以下命令安裝好yaffs文件系統制作工具:
cd /mnt/hgfs/share
tar –zxvf mkyaffs2image.tgz –C /
在/opt/studyarm目錄下,使用命令mkyaffs2image rootfs rootfs.img 生成根文件系統映像文件。
注意:
制作鏡像提供的有兩個工具,我的開發板是1G Flash的所以應該選用mkyaffs2image-128M的,選用mkyaffs2image會出現燒寫文件系統不成功的錯誤。提供的文檔中rootfs_rtm_210這個文件系統也是可用的