一、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

把内存卡插入开发板,使用串口工具设置环境变量:

setenv gatewayip 192.168.1.1
setenv ipaddr 192.168.1.102
setenv netmask 255.255.255.0
setenv serverip 192.168.1.10saveenv

二、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
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(写入长度)

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

 

记住yaffs镜像是包含OOB数据的,所以写入NAND Flash的数据长度应该是2112(=2048 + 64)字节的整数倍。

2:如果用NFS烧写文件系统

home/xyp/nfsroot/rootfs
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/modulesecho "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/tempmkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp 
	chmod 1777 var/tmpecho "-------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文件: 

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到指定目录: 

busybox-1.13.3 
/home/ly/system/rootfs

在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。

6、建立etc目录下的配置文件 
1、etc/mdev.conf文件,内容为空。 
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 prevlevelecho "----------munt all----------------" 
	mount -aecho /sbin/mdev>/proc/sys/kernel/hotplug 
	mdev -secho "*************************************" 
	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>&1USER="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这个文件系统也是可用的