燒寫ARM開發板系統教程----->uboot 、內核以及文件系統


一、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這個文件系統也是可用的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM