arm linux平台基本搭成

内核编译和嵌入式产品的设计与开发
回复
头像
ly50247
帖子: 89
注册时间: 2008-07-29 8:01

arm linux平台基本搭成

#1

帖子 ly50247 » 2011-05-21 19:39

飞凌的OK6410板子,买了快一个月了,但就刚买那两天试了下,之后事比较多就放下了。昨天突然想再折腾下,弄了一天终于比较明朗了,总结一下。

基本配置:

cpu: s3c6410

ram: ddr sdram 256M

nandflash: 2G

screen: 4.7 480x272

接口比较多但基本没什么外设,现在用到的有串口接口、SD卡、网口、USB host。

pc主要是linux平台,如果实在解决不了问题用xp虚拟机。目前发现有一个问题不好解决。

串口通信用c-kermit,因为之前用minicom发现有问题,网上也更推荐c-kermit,另外用起来也比较舒服,全命令操作。

自带的Wince系统,用了会,感觉没兴趣,之前就换成linux了。

从nandflash启动,先用启动到Eboot,然后按A清除nandflash,这步是必须的,不然之后会出错。然后再启动就没有任何反应了。

官方手册有两种烧写linux方法,一键烧写和分步烧写。

开始时试分步烧写遇到不少麻烦。因为手册上用的全是windows下的工具,在linux下比较困难,还好经验比较多,又上网找了不少资料。

首先得启动到uboot,只能用sd卡了,而手册里要用一个windows下的工具来制作,无奈用了下虚拟机(之后的操作就再也不用了)。其实它只是把一个文件拷到sd卡的某个地址,但具体是什么地址不清楚,网上说法也不一,有的说是最后的8k,有的说是根据fat32的分区表计算的,这个问题以后再仔细研究吧。

那个文件是一个uboot,自带了一些启动参数,用于自动烧写linux。

然后调整到sd卡启动方式就要以启动了,按空格停住。这时就进入uboot了。

烧写的步骤是分别将uboot、linux内核、文件系统烧写到nandflash的不同地址。

首先要解决的问题就是怎么把文件传到板子上。

因为这里手册上用的超级终端和dnw,在这纠结了好一会。

发现c-kermit串口传文件还是比较方便的:

uboot里运行loadb 地址,然后退到命令模式send filename就可以发过去了,这时文件传到指定的内存地址,再用uboot的命令就可以烧写到nandflash里了。但有一个问题,串口传输太慢,发了uboot还行,发内核就要十多分钟,显然不好用。手册里是用dnw通过usb传的。上网一找dnw有linux版本,但编译了好几个都没法用,最后放弃了。

最后还是用了自动烧写的方式。

还是刚才的sd卡,把3个文件放进去,用它启动就行了。安装完再从nandflash启动就进入了linux。光盘里的linux比较简单,虽然也不小,但不少都是qt相关的东西,默认进入QTOPIA界面,感觉易用性还好。但我对GUI的东西不感兴趣,除了/opt其他的加里来也就十几兆了,不少命令都没有,连dhcpcd或dhclient都没有。昨天试图编译一个dhcpcd,结果发现/分区不可写,运行dhcpcd不方便,于是按手册上烧个yaffs2文件系统。重启调参数后发现启动到内核pc端就没反应了,东西直接显示在lcd上,找了好久不知道怎么回事。

今天终于发现是启动参数弄错了,console=ttySAC0 写成了console=/dev/ttySAC0,是手册上错的,手册看上去很详细,错误一片片的,很无语。

然后根分区可写了。

文件要传到板子上,最明了的方法是用sd卡,但比较麻烦,用网络传比较方便,和pc用交叉网线连上,设好ip,然后在pc上启动一个web或ftp服务器,板子上有wget、ftpget、ftpput,可以下载上传。tftp和nfs因为之前没配明白,先没试,以后直接开ssh就行了。

传上dhcpcd,运行出错,非法指令什么的意思,调参数重编译几回还不行,后来换板子光盘的编译器重编错误变了,但还是连不上。

后来想这个linux也不好用,不如换一个。

pc上用的archlinux,很顺手,但官方没有arm版。虽然有个非官方的但一看包很少,也不活跃,就算了。其余可以考虑的基本就debian和gentoo了。对gentoo无爱,没那么多时间浪费在交叉编译上,环境也不好搭。debian成最优解。又恰好看到http://code.google.com/p/mini6410-debian/,可以直接用里边的文件系统,思路就明朗了。

按之前烧写yaffs2的方法,只是文件换成了上边的debian_squeeze_armel_minimal_28.01.2011.tar.bz2。而内核还用之前的,尝试下果然可行。虽然启动比之前慢了点,但命令基本可pc没什么差别了,又可以从源安装包,非常方便。

还有个问题是系统装在nandflash不大方便,如果能安在sd卡上就好了。

现在的情况是uboot和内核在nandflash上,文件系统在sd卡上,基本实现了,下一步就是看怎么把内核也放sd卡上。

走了些弯路,最后这么实现的:

sd卡只放文件系统,单分区,ext3格式,直接把上边的文件解压到里边。

改uboot启动参数:

setenv bootargs "root=/dev/mmcblk0 console=ttySAC0,115200"

bootcmd不变:

bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000

但有个问题,默认的内核不支持ext3分区。开始时想办法把sd卡弄成yaffs2格式,发现好像不对。后来重编译内核加入ext3支持可以启动了。

然后回来了开始的dhcp问题,现在有dhclient命令了,但运行发现无问题,应该是少内核选项,重编译后好了。

板子终于可以上外网了。

一些备忘:

bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200
bootcmd=nand erase;fatload mmc 0:1 0x50008000 u-boot.bin;nand write.uboot 0x50008000 0 0x100000;fatload mmc 0:1 0x50008000 zImage;nand write.e 0x50008000 0x100000 0x500000;fatload mmc 0:1 0x50008000 cramfs;nand write.e 0x50008000 0x600000 0x7800000;
#nand:
bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200
bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000
bootdelay=1
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.20
serverip=192.168.1.10
gatewayip=192.168.1.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial

/dev/mmcblk0
/dev/mmcblk0p2
setenv bootargs "root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200"
setenv bootargs "root=/dev/mtdblock3 rootfstype=yaffs2 console=ttySAC0,115200"

dhclient -v -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
mr.cai2009
帖子: 1
注册时间: 2011-09-05 16:47

Re: arm linux平台基本搭成

#2

帖子 mr.cai2009 » 2011-09-05 16:51

楼主您好,我最近也在弄SD卡更新内核和文件系统的问题,请问你使用fatload mmc 0:1 addr filename 命令时,下载速度不会很慢吗?尤其是下载文件系统时更慢(我的根文件系统大约60M),约用5分钟,而用tftp下载根文件系统只需要2分钟,请问这是为什么?谢谢!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: arm linux平台基本搭成

#3

帖子 eexpress » 2011-09-05 17:55

不是应该可以使用nfs启动的嘛。
● 鸣学
头像
djh0558
帖子: 176
注册时间: 2007-11-11 17:50
来自: 深圳福田
联系:

Re: arm linux平台基本搭成

#4

帖子 djh0558 » 2011-09-09 15:04

潜水学习中
努力,
要的不是结果!
回复