ARM系统移植搭建环境
一、把开发板串口与电脑串口相连,若电脑无串口,可使用USB转串口线,在设备管理器中找到对应串口号
二、打开中端软件,来连接开发板(此处我是用的是SecureCRT,你也可以使用其他终端软件)
连接好后进入如下界面
打开开发板电源进入u-boot后,可以看到终端上打印信息
1. 板子串口能显示信息
{//? 无串口打印信息波特率设置不对, 流控未选为无
电脑用的可能是其他COM口,而不是你自己开发板连的COM口
u-boot被破坏了需用USB dnw_v0.60c.exe 重烧录最初USB Installer_DDR2.bin 和u-boot.bin
/* 烧录USB Installer_DDR2.bin u-boot.bin 失败
USB 地址应设为 0x27e00000 //或0x2ff80000
有的window系统不行,换能行的电脑
下载Installer_DDR2.bin u-boot.bin后,后tftp u-boot.bin烧录到板子张
界面上要显示 USB:OK 注意:板子第四个开关,应拨下去
换一个电脑的USB口
换一个板子试试
? 关板子电源会导致电脑重启。
板子的USB口有问题,会导致电脑重启。 最好不用USB口,除非boot被破坏了
*/
}
{//usb方式烧录u-boot
1. 安装USB驱动
2. 打开USB dnw_v0.60c.exe,设置 USB 地址应设为 0x27e00000 或0x2ff80000
3. 把板子第四个开关,拨下去,接上USB线,上电
如果成功, USB dnw_v0.60c.exe 会又显示
4. 打开串口终端
5. 点 dnw_v0.60c.exe ->USB port -> Transmit -> 下载Installer_DDR2.bin u-boot.bin
后会看到串口终端有信息显示
6. 烧录新的u-boot
#setenv serverip 192.168.9.120
#setenv ipaddr 192.168.9.200
#setenv gatewayip 192.168.9.1
#tftp 0x20008000 u-boot.bin
#nand erase 0 40000
#nand write 20008000 0 40000
#saveenv
把开关第四个开关拨回, 拔掉USB线
#reset
}
}
{//2. 板子能ping通虚拟机
------------------------
|板子 192.168.9.200 |
------------------------
|
------------------------
|电脑 192.168.9.222 | //做中转用,和板子虚拟机IP要在同一网段, 且不能和它们IP一样
------------------------
|
------------------------
|虚拟机 192.168.9.120 |
------------------------
//---------确认电脑和板子是能通信的
设置电脑网卡ip 为192.168.9.222 255.255.255.0 192.168.9.1
启动板子,快速按任意键停在boot处,设置u-boot 的环境变量
$ setenv serverip 192.168.9.120 //注意它与虚拟机里 ubuntu 的ip要一致
$ setenv ipaddr 192.168.9.200
$ setenv gatewayip 192.168.9.1
$ print 查看设置后效果
/*
FSC100 # pri
baudrate=115200
bootdelay=3
ethact=dm9000
ethaddr=11:22:33:44:55:66
bootcmd=tftp 20008000 zImage ; go 20008000
filesize=735000
fileaddr=20008000
gatewayip=192.168.9.1
netmask=255.255.255.0
ipaddr=192.168.9.200
serverip=192.168.9.120
bootargs=root=nfs nfsroot=192.168.9.120:/nfs/rootfs console=ttySAC0,115200 init=/linuxrc ip=192.168.9.200
stdin=serial
stdout=serial
stderr=serial
Environment size: 380/131068 bytes
*/
$ ping 192.168.9.222 //测试网络是否连通 ,注意在u-boot中, 它能ping电脑, 电脑不能ping它
//注意,要拔掉jtag线,否则ping 会重启
host 192.168.9.222 is alive //is alive 表示ok
$ saveenv 保存设置
//---------确认电脑和虚拟机时能通信
1. vmware -> Edit ->Virtual Network Editor -> VMnet0 bridge 指定连接的网卡 //注意不要用automic 手动指定对应的网卡
2. vmware -> VM->Setting -> Network Adapder -> Custom(VMnet0)
3. 点linux中 System -> Preferences -> Network Connections ->全删掉-> add 新建一个 -> IPV4 Settings -> Method 选Manual -> 点add
设置为 192.168.9.120 255.255.255.0 192.168.9.1 ->apply -> close
点右上角网卡图标,先disable,再enable 激活一下 //如果后面还是ping不通, 把虚拟机重启一下
//---------确认板子能ping通虚拟机
$ reset 重启boot
$ ping 192.168.9.120 //注意: boot阶段是板子能ping 外面 ,外面是不能ping它的
host 192.168.9.120 is alive //通讯OK ,失败会显示not alive
}
{//3. tftp 下载文件 (产品出厂时需烧录bin文件)
//----虚拟机上安装tftp服务
#dpkg -s tftpd-hpa //检查是否安装tftp server
#apt-get install tftpd-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"
#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 的分区 可通过arch/arm/mach-s5pc100/mach-smdkc100.c 中nand 的 mtd_partition s5pc100_nand_part来修改
|====Flash===| 0x10000000(256M)
| |
| |
|------------| 0x800000
| rootfs | mtdblock2
|------------| 0x400000
| kernel | mtdblock1
|------------| 0x100000
| ... |
|------------| 0x40000
| u-boot | mtdblock0
|============| 0
NandFlash //没有物理基地址, 它是通过0xE7200000控制去获取数据,见copy_uboot_to_ram nandll_read_blocks
*/
//-----下载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
$ nand write 20008000 0 40000
$ 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 保存设置
//-----下载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
//-----下载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
}
{//4. 网络自动 tftp 加载内核,并挂载nfs rootfs 启动
1. 设置网络加载内核
#setenv bootcmd tftp 20008000 zImage \; go 20008000
#saveenv
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
$ savenenv
$ 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- 表示安装交叉编译工具成功了
}