二、 tftp 下载文件 (产品出厂时需烧录bin文件)
//----虚拟机上安装tftp服务
#dpkg -s tftpd-hpa //检查是否安装tftp server
#apt-get install tftpd-hpa tftp-hpa //如果未安装,安装 tftp-server
#vi /etc/default/tftpd-hpa //修改tftp服务器配置文件为
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-c -s -l" //原linux为P_OPTIONS="--secure"
#mkdir /tftpboot //创建tftpboot目录,
#chmod a+w /tftpboot
#service tftpd-hpa restart //启动 tftp-server
//-----验证虚拟机tftp服务是否OK
# cat /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
#service tftpd-hpa restart //如果有更改配置,需要重启一下 tftp-server
#cd /tftpboot
#touch test
#cd /tmp
#tftp 127.0.0.1
tftp>get test
tftp>q
#ls //看到有test文件,表示该tftp服务是OK的
/*--flash 的分区
|====Flash===| 0x10000000(256M)
| |
| |
|------------ | 0x800000
| rootfs | mtdblock2
|-------------| 0x400000
| kernel | mtdblock1
|------------ | 0x100000
| ... |
|-------------| 0x40000
| u-boot | mtdblock0
|============| 0
NandFlash //没有物理基地址, 它是通过0xE7200000控制去获取数据,见copy_uboot_to_ram nandll_read_blocks
*/
2.1//-----下载u-boot
#ls /tftpboot/ //查看tftp服务器上有什么文件,可以传输
#cp ~/e/pkg/u-boot.bin /tftpboot
$ tftp 0x20008000 u-boot.bin //下载u-boot.bin到板子的内存0x20008000上,tftp可能失败,可能原因,网路不好,虚拟机种tftp配置,或未起来
$ nand erase 0 40000 //擦出nandflash中,从100000开始,长度为300000的内容
$ nand write 20008000 0 40000 //把内存20008000中的内容写入nandflash的100000地址中,长度为300000
$ reset 后迅速停止
$ pri //烧写新u-boot后,serverip有可能改变,如果发现serverip 都变了,要重设环境变量
$ setenv serverip 192.168.9.120
$ setenv ipaddr 192.168.9.200
$ setenv gatewayip 192.168.9.1
$ saveenv 保存设置
2.2//-----下载kernel
$ tftp 0x20008000 zImage //从tftp服务器里下载内核zImage 到内存20008000地址中 ,tftp服务器的ip地址由serverip 变量确定
$ nand erase 100000 300000 //擦除nandflash中,从 100000 开始,长度为300000的内容
$ nand write 20008000 100000 300000 //把内存20008000 中的内容 写入nandflash的100000地址中,长度为300000
$ setenv bootcmd nand read 20008000 100000 300000 \; go 20008000 //u-boot倒数计数时,如果不干预,它会自动加载bootcmd中命令运行。 如果有多个命令 用 \; 分隔开来
//这里是指,自动从nandflash中读入内核, 然后运行内核。
$ saveenv
2.3//-----下载rootfs
$ tftp 0x20008000 rootfs.cramfs
$ nand erase 400000 400000
$ nand write 20008000 400000 400000
$ setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
$ saveenv
$ reset
三、 网络自动 tftp 加载内核,并挂载nfs rootfs 启动
3. 1. 设置网络加载内核
#setenv bootcmd tftp 20008000 zImage \; go 20008000
#saveenv
3.2. 挂载nfs rootfs
//--在电脑上输入
#mkdir /nfs
#cd /nfs
#cp ~/e/pkg/rootfs.tgz .
#tar -xvf rootfs.tgz
#vim /etc/exports 修改为下面的内容
/nfs/rootfs *(rw,sync,no_root_squash)
#/etc/init.d/nfs-kernel-server restart //重启nfs服务,使得前面修改生效
//--在板子上输入
$ setenv bootargs root=nfs nfsroot=192.168.9.120:/nfs/rootfs console=ttySAC0,115200 init=/linuxrc ip=192.168.9.200
$ saveenv
$ pri
/*
baudrate=115200
bootargs=root=nfs nfsroot=192.168.9.120:/nfs/rootfs console=ttySAC0,115200 init=/linuxrc ip=192.168.9.200
bootcmd=tftp 0x20008000 zImage ; go 20008000
bootdelay=3
ethact=dm9000
ethaddr=11:22:33:44:55:66
fileaddr=20008000
filesize=1D8664
gatewayip=192.168.9.1
ipaddr=192.168.9.200
netmask=255.255.255.0
serverip=192.168.9.120
*/
$ reset //后能顺利挂载nfs rootfs 当显示Please press Enter to activate this console. 表示成功。 按enter 进入后创建一个文件, 电脑的/nfs/rootfs上同步看得到
}
{//5. 交叉编译工具安装
#tar -xvf arm-cortex_a8-linux-gnueabi.tar.bz2
#cd arm-cortex_a8/bin
#pwd
显示/root/store/arm-cortex_a8/bin //注意这个路径下面export中用到的要一
#echo export PATH=/root/store/arm-cortex_a8/bin/:$PATH >> ~/.bashrc //添加到启动脚本,使其再次启动后仍有效
#source ~/.bashrc //使其马上生效
#arm-c 然后按Tab键补全 //如果能补全为arm-cortex_a8-linux-gnueabi- 表示安装交叉编译工具成功了
}
{//6. u-boot编译
#tar -xvf u-boot-2010.03-ok.tar.gz
#make fsc100_config
#make
#cp u-boot.bin /tftpboot/
}
{//7. 内核编译
配置编译关系 kconfig -> make menuconfig -> .config -> makefile ->zImage
#tar -xvf linux-2.6.35-farsigt.tar.gz
#cd linux-2.6.35-farsigt
#make meunconfig //图像界面进行配置(如 指定新的驱动,内核裁剪)
#make zImage //只编译内核
// #make modules //只编译模块文件(.ko文件)
#cp arch/arm/boot/zImage /tftpboot/
}