刚解决这个问题,很激动
先说说这个板子吧,MPC8315ERDB,飞思卡尔的,CPU:Freescale MPC8315E 400MHZ,Flash有两块,8M的
Nor Flash和32M的Nand Flash,其他配置也很丰富,2块千兆网卡,一块160G三星硬盘,还有很多接口什
么的,不过跟本文无关,还是废话少说。
做这个移植主要参考了User_Manual_MPC8315ERDB_20080627.pdf和NAND-MPC8315ERDB.html,还有另一篇
文章《freescale LTIB使用总结》,出处http://blog.chinaunix.net/u2/80953/showart.php,首先需要说明的是前面那个User_Manual_...中的Flash代表的是Nor flash,这点尤为重要?id=1275002,后面讲原因。
下面开始说步骤,首先在主机平台上安装BSP(Board Support Package,在这里就是ltib,linux target
image builder,个人理解),手册里说挂载一个ltib.iso镜像,不过在我这里直接是从dvd盘拷过来的,
也就没有这个挂载操作了,拷过来之后需要安装,很奇怪的是安装必须在非root用户下,不过还得修改
这个非root用户的权限,想不通为什么,直接看操作吧,在root用户下执行#/usr/sbin/visudo这样就打
开一个权限设置文件,然后按i进去插入模式,在最后面输入
tanlingyun ALL = NOPASSWD:/bin/rpm,/opt/freescale/ltib/usr/bin/rpm。用你自己的用户名替代tanlingyun,然后按
ESC,按:wq保存退出,然后创建一个安装ltib的根目录,mkdir -m 777 /usr/local/mpc8315,777代表
所以组和用户都具有完全的权限,如果你是直接用root登陆的那么此时注销用你刚才那个用户名登陆,
如果你是通过su得到root权限的,那么此时在终端下执行exit退回到普通权限,然后cd
/usr/local/mpc8315,然后<ltib_path>/install,出来一个Do you want to continue?Y|n,这里选Y,
等下出来I have read and accept the EULA(yes|no),这里输入yes,可不是y了,这样就会将ltib安装
在/usr/local/mpc8315下,我这里安装后的文件名是ltib-mpc8315erdb-20080630,然后cd进去这个目录
,可以用./ltib --help,看一下帮助,如果直接./ltib的话就是用的默认的配置文件,这里因为要编译
出jffs2文件系统,所以必须./ltib -c或者./ltib --configure,出来一个让你选platform的界面,这
里默认就是对的,直接exit,选yes保存,然后出来的是LTIB:Freescale MPC8315E RDB PowerPC board
,首先找到Target Image Generation,点击options进入,将target image改成jffs2,默认是ext2.gz
ramdisk,然后本文最最重要的一点,将jffs2 erase block size in KB(NEW)的默认64改成16,不改的
话无论你后面怎么做,最后启动的时候,总是说jffs2_scan_eraseblock(): Magic bitmask 0x1985 not
found at ******,一大堆的错误,这就是我前面为什么说要注意用户手册里说的flash是nor flash的原
因,因为nor flash用的是64,我看手册里说JFFS2 filesystem support both NOR and NAND flash
memory,还真的以为什么都不用改了,试验了很多次总是失败,后来觉悟到了,本来准备自己先试试32
然后再16再不行就128的,结果在NAND-MPC8315ERDB.html最下面看到
dev: size erasesize name
mtd0: 00100000 00010000 "U-Boot"
mtd1: 00400000 00010000 "FileSystem"
mtd2: 00200000 00010000 "Kernel"
mtd3: 00100000 00010000 "DTB"
mtd4: 00100000 00004000 "U-Boot-NAND"
mtd5: 00800000 00004000 "JFFS2-NAND"
mtd6: 00400000 00004000 "Ramdisk-NAND"
mtd7: 01000000 00004000 "Reserve-NAND"
mtd8: 00200000 00004000 "Kernel-NAND"
mtd9: 00100000 00004000 "DTB-NAND"
真的有点大喜过望的感觉,果然是erase block的问题,选择了16之后再退回到主界面,如果你还需要自
己配置内核的话,可以选中Configure the kernel,这样待会过后就会有配置界面出来,其实是还需要
为支持nand配置内核的,结果我打开一看,默认就全配好了,也懒得管其他了,因为我就是做这个实验
,之前文件系统一直是在ramdisk中跑的,一开机啥都没了,很不爽才做这个的,继续,然后exit,选择
yes保存,就开始编译了,这个需要十几分钟的时间,视你机器配置而定,编译完了之后rootfs.jffs2就在当前目录下,将他拷到tftpboot,这里得配tftp,看文章最后,对了我是用的red hat 9.0,忘了说了,不过应该在linux下都差不多的。
编译完之后就开始移植了,在这里我的Uboot事先已经烧到nor flash里面去了,启动板子出现Hit any
key to stop autoboot的提示后,随便按个键就进到uboot的命令行下了,然后开始Configure Uboot
For flash deployment,你可以printenv看看你当前的配置,不清楚命令的话可以直接键入?看说明
=>setenv ipaddr 192.168.1.100(板子的ip)
=>setenv serverip 192.168.1.111(tftp服务器的ip,这里得先配好tftp,待会说)
=>setenv gatewayip 192.168.1.1(应该是板子的,好像我主机没设网关)
=>setenv bootargs root=/dev/mtdblock5 rw rootfstype=jffs2 console=ttyS0,115200(mtdblock5是
文件系统在nand中的分区位置)
=>saveenv(记得保存)
给nand分区,我不知道默认分了没,我反正安装手册上说的分了一遍
=> setenv mtdids nand0=nand0
=> set mtdparts mtdparts=nand0:1M(U-Boot-NAND),8M(JFFS2-NAND),4M(Ramdisk-NAND),16M
(Reserved-NAND),2M(Kernel-NAND),-(DTB-NAND)
=> mtdparts(可以看到分好后的)
=>saveenv(也保存一下)
用set mtdparts 。。的时候最后一行可能会显示不下,这里继续写就行了,不必管显示的问题,务必仔细。
然后
=>tftp 400000 rootfs.jffs2(这个文件在/tftpboot下,是从刚才编译好的拷过来的,400000是ram中的
地址,也可以写其他的,只要不越界就行)
=>nand erase 100000 800000(前面100000是nand中的偏移位置,后面是大小,都是十六进制)
=>nand write 400000 100000 $filesize(后面是文件大小,会自动给你计算出)
然后写完后出现5275648 bytes written:Ok,前面是文件大小,你的可能和我的会不一样
然后boot,重启,出来一大堆字符信息,登入用户名密码成功登陆,你可以再里面修改配置建文件什么
的,再也不用担心重启板子后又没了,之前是因为nor flash实在是太小,才8M,而nand flash又没放成
功,不得已才把文件系统做成ramdisk的,每次改点配置什么的都不会保存,痛苦的要死,现在终于解决
了,其实问题也很简单,就是一定要细心。我这里面都没讲内核和dtb怎么移植,这个都是放在nor
flash中,手册上讲的很详细,也不会出什么问题,不啰嗦了。
附一点tftp的配置
用vi编辑/etc/xinetd.d/tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = /tftpboot
}
保存退出,以后你把东西扔到tftpboot就可以通过tftp传输了,还得配置板子和主机ip在一个网段内,
插上网线
然后/etc/init.d/xinetd restart 重启tftp服务。