本节将以MPC8308RDB开发板为基础,展示一个开发实例。
7.1目标配置
本节开始前,先看下图,下图是MPC8308RDB目标板系统启动后,由boot loader映射的系统内存。
Range Start Range End Definition Size
0x0000_0000 0x07ff_ffff DDR 128M
0xa000_0000 0xafff_ffff PCI Express 1 Mem 256M
0xb000_0000 0xb0ff_ffff PCI Express 1 Config 16M
0xb100_0000 0xb17f_ffff PCI Express 1 IO 8M
0xe000_0000 0xe00f_ffff IMMR 1M
0xe060_0000 0xe060_7fff NAND Flash (CS1) 32K
0xfe00_0000 0xfe7f_ffff NOR Flash (CS0) 8M
8M的Nor flash开始地址为0xFE00_0000,如下图所示:
Range Start Range End Definition
0xfe00_0000 0xfe05_ffff U-Boot
0xfe0a_0000 0xfe2f_ffff Kernel
0xfe30_0000 0xfe7e_ffff Ramdisk file system
0xfe7f_0000 0xfe7f_3fff DTB
0xfe7f_e000 0xfe7f_ffff Vitesse
有了上面的全局概念,接下来进行目标板的设置。
独立模式设置
1、通过MPC8308E RDB开发板上的Etsec 1端口连接到网络。
2、用RS-232线缆连接MPC8308E RDB开发板的串口到主机。
3、设置主机的超级终端,波特率设为115200bps,8位,无奇偶校验,1位停止位。
4、验证所有的开关和跳线是否正确设置为默认值。默认频率为400/133MHz(CPU/相干系统总线)。MPC8308E RDB默认开关设置:
S1:板子修正和引导Flash选择开关。
S2:复位配置字源选择开关。
5、将板子连接到支持的电源。
6、为板子加电。
7.2目标部署(可部署到flash中)
本节描述怎样部署U-Boot、Linux内核和文件系统到目标板上。默认情况下,当开发板加电后,它将显示信息并且停在U-Boot的命令提示符。
按如下方法进行配置,完成目标文件的部署。
主机设置:
1、 为tftp能工作,关闭防火墙。# iptables –F或在命令行键入setup
2、 安装tftp-server。
3、 为MPC8308ERDB创建tftpboot目录和它的子目录。
# mkdir /tftpboot
# mkdir/tftpboot/mpc8308
4、 拷贝kernel,bootloader,DTB,Vitesse和文件系统镜像到/tftp/mpc8308目录。
# cp <install_path>//ltib-mpc8308erdb-xx /rootfs/boot/* /tftpboot/mpc8308
# cp <install_path>/ltib-mpc8308erdb-xx /rootfs.ext2.gz.uboot /tftpboot/mpc8308
或者
# cp /mnt/cdrom/Images/* /tftpboot/mpc8308
5、 连接开发板到网络
6、 通过串口连接目标和主机
7、 运行minicom 并设置。
- Serial Setup: Select correct serial device; Hardware & Software Flow control =
No; Bps=115200
- Modem & dialing: Delete text for the following: Init String, Reset String, Hang-up
String, No flow control
8、 为开发板加电并显示命令提示符。
烧写U-Boot:
Flash 范围从0xFE00_0000到0xFE7F_FFFF。U-Boot镜像必须被编程进Flash,且开始地址为0xFE00_0000,可以通过CodeWarrior for PPC version 8.8 加PowerTAP Pro or USB TAP。
另外一种方法是使用U-Boot命令来编程,它的前提是在Flash上已经存在一个固化的可工作的U-Boot程序。
=>tftp 2000000 u-boot.bin
将u-boot下载到0x0200_0000开始的内存(DDR)中。
=>protect off all
=>erase fe000000 fe0fffff
擦出flash地址空间0xFE00_0000到 0xFE0F_FFFF
=>cp.b 2000000 fe000000 $filesize
将内存中0x0200_0000开始的filesize大小的内容拷贝到flash的0xFE00_0000开始的地址空间。
完成之后复位开发板重新引导。
配置U-Boot:
由LTIB生成的镜像允许您执行ramdisk部署。在执行ramdisk部署之前,需要先配置U-Boot参数。
在U-Boot命令提示符,设置u-boot环境如下:
=>setenv ipaddr <board_ipaddress>
=>setenv serverip <tftp_serverip>
=>setenv gatewayip <your_gatewayip>
=>setenv tftp_path mpc8308
=>setenv ramdiskaddr 2400000
=>setenv loadaddr 2000000
=>setenv kernaddr 2000000
=>setenv fdtaddr 1f00000
=>setenv ramdisksize 90000
=>setenv dtbname mpc8308erdb.dtb
=>setenv hostname PowerQUICC
=>setenv flashkernaddr fe0a0000
=>setenv flashkernend fe2fffff
=>setenv flashramdiskaddr fe300000
=>setenv flashramdiskend fe7effff
=>setenv flashfdtaddr fe7f0000
=>setenv flashfdtend fe7f3fff
=>setenv fdtsize 3000
=>setenv vscfwaddr fe7fe000
=>setenv vscfwend fe7fffff
=>setenv setargs 'setenv bootfile $tftp_path/uImage;setenv
fdtfile $tftp_path/$dtbname;setenv ramdiskfile
$tftp_path/rootfs.ext2.gz.uboot'
=>setenv setramargs 'setenv bootargs root=/dev/ram
ramdisk_size=$ramdisksize rw
ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off
console=$consoledev,$baudrate $othbootargs'
=>setenv upvscfw 'tftp $loadaddr $tftp_path/vsc2bin; erase
$vscfwaddr $vscfwend; cp.b $loadaddr $vscfwaddr $filesize'
=>setenv upuboot 'setenv bootargs root=/dev/ram rw
console=$console,$baudrate;tftp $loadaddr mpc8308/uboot.
bin;protect off all;erase fe000000 fe05ffff;cp.b $loadaddr
fe000000 $filesize'
=>setenv upkernel 'run setargs;run setramargs;tftp $loadaddr
$bootfile;erase $flashkernaddr $flashkernend;cp.b $loadaddr
$flashkernaddr $filesize;tftp $loadaddr $fdtfile;erase
$flashfdtaddr $flashfdtend;cp.b $loadaddr $flashfdtaddr
$filesize'
=>setenv upramdisk 'tftp $ramdiskaddr $ramdiskfile;erase
$flashramdiskaddr $flashramdiskend;cp.b $ramdiskaddr
$flashramdiskaddr $filesize'
=>setenv tftpramboot 'run setargs;run setramargs;tftp
$ramdiskaddr $ramdiskfile;tftp $kernaddr $bootfile;tftp $fdtaddr
$fdtfile;bootm $kernaddr $ramdiskaddr $fdtaddr'
=>setenv flashramboot 'run setargs;run setramargs;cp.b
$flashfdtaddr $fdtaddr $fdtsize;bootm $flashkernaddr
$flashramdiskaddr $fdtaddr'
=>saveenv
完成后,U-Boot已经准备好执行ramdisk部署。
烧写Vitesse二进制:
Vitesse 二进制被存储在flash的0xFE7FE000到0xFE7F_FFFF空间。使用tftp U-Boot 命令固化该文件。如上面的描述,设置U-Boot 的环境变量。
=>run upvscfw
烧写内核和ramdisk:
如上设置U-Boot的环境变量。
烧写内核和DTB:
=>run upkernel
烧写 ramdisk:
=>run upramdisk
部署:
从TFTP上部署Ramdisk
1、 设置U-Boot环境变量(如上面描述)。
2、 从TFTP下载镜像
Tftp映像到板子上,接着进行引导:
=>tftp 2000000 mpc8308/uImage
=>tftp 2400000 mpc8308/rootfs.ext2.gz.uboot
=>tftp 1f00000 mpc8308/mpc8308erdb.dtb
3、 启动板子
=>bootm 2000000 2400000 1f00000
或者使用一个单一命令:
=>run tftpramboot
从Flash上部署RamDisk
内核、DTB和ramdisk被固化在flash里,按下面的方法从flash部署。
=>run flashramboot
运行该命令,实质上执行了以下内容:
=>run setargs
=>run setramargs
=>cp.b FE7F_0000 01F0_0000 3000
上面是将flash上存储的DTB拷贝到内存单元0x01f0_0000。
=>bootm FE0A_0000 FE30_0000 1F00_0000
7.3 NFS引导内核(部署到内存中)
本小节描述如何引导主机上的内核文件,本节的一些路径和前两节稍有不同。
首先,主机必须按照前几节讲述那样安装NFS 的端口映射和NFS服务,并设置导出目录(本节仍将用/home/jun/ltib/rootfs)。
其次,从NFS引导必须正确的设置TFTP路径,因为在NFS挂载之前,u-boot会通过TFTP从主机tftpboot路径下载内核镜像和DTB文件到内存中,然后从内存引导内核。本处设置的tftp 目录为/tftpboot,在该目录下建有/freescale/PPC/ltib-mpc8308erdb-20100413/rootfs 的文件夹链接192.168.1.10 (这是一个链接文件名)。当MPC8308ERDB板加电进入u-boot命令行提示符后,完成以下环境变量的设置:
=>setenv ipaddr 192.168.1.10
=>setenv serverip 192.168.1.53
上面的命令时设置host主机的IP地址(本主机IP为192.168.1.53)。可以通过ifconfig –a 查看。该地址必须和主机一致。
=>setenv gatewayip 192.168.1.1
=>setenv netmask 255.255.255.0
=>setenv tftp_path 192.168.1.10/boot
192.168.1.10/boot 为映像文件路径。因为在主机的tftp配置文件中,已经设置为/tftpboot,所以192.168.1.10/boot 前面不需要加/tftpboot。
设置完成后(设置内容应当按照自己主机的配置修改),保存
=>saveenv
保存后,必须复位CPU或重启,此处选择命令复位CPU:
=>reset
重启后,在命令行可以执行ping命令看是否可以链接主机(必须通过以太网线将板子的以太网1链接到主机以太网端口,且该端口的IP地址必须和上述环境变量中的serverip一致)。
=>ping 192.168.1.53
如果连通,则出现:host 192.168.1.53 is alive
否则控制台出现: ping failed; host 192.168.1.53 is not alive
连接正常即可执行NFS启动。如下:
=>run setargs
上述命令会扩展出需要的文件的详细路径,包括uImage、DTB文件、rootfs.ext2.gz.uboot(ramdisk)。注意,rootfs.ext2.gz.uboot文件不在rootfs/boot文件夹下,而在ltib根目录。若要使用可以将其拷贝到该目录下,或修改环境变量ramdiskfile的值。
=>run nfsboot
执行该命令后,在控制台打印下载和启动信息,如下图:
至此,已经完成了NFS挂载。引导启动完成后,在命令行输入用户名和密码,默认用户名为root,密码为root。可以修改。登录后,可以发现现在的根目录为主机上/home/jun/ltib/rootfs目录。这表明NFS的挂载成功了。您可以做些简单的测试,例如新建文件、删除等操作,对比目标板的根目录和主机NFS导出目录是否有同步的变化。
注意:实现NFS挂载必须要在内核编译时选择支持NFS文件系统,该选项在文件系统à网络文件系统中。