LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1855|回复: 3

arm linux平台基本搭成

[复制链接]
发表于 2011-5-21 19:26:40 | 显示全部楼层 |阅读模式
飞凌的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/mini641 ... 路就明朗了。

按之前烧写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
发表于 2011-5-30 23:42:56 | 显示全部楼层
请问一下你知道那个mtdblock和mmcblk两个设备之间有什么区别嘛?操作上都一样?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-31 13:07:59 | 显示全部楼层
Post by milkline;2141222
请问一下你知道那个mtdblock和mmcblk两个设备之间有什么区别嘛?操作上都一样?

mtdblock是nandflash,mmcblk是sd卡/mmc卡,区别很大。
如果想比较nandflash和sd卡可以上网找,比较多。
从操作上,sd卡和硬盘差不多,可以分成各种类型的分区像ext4、jfs、vfat什么的。
mtdblock的分区是在内核里写好的,不能再手动分区,分区类型基本都是yaffs2,也是内核里定的,但挂载使用之类的和其他分区也差不多。
回复 支持 反对

使用道具 举报

发表于 2011-6-1 16:25:30 | 显示全部楼层
那烧写方式一样吗?
另外u-boot是你自己编译的吗?用什么工具链呢?
我一直没搞清楚在arch上面怎么安装交叉编译工具链,要么少库,要么库的路径不认,我又不知道怎么配置include路径,所以很悲催。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表