Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2970391
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类:

2009-07-01 22:39:29

AT91sam9263EK使用NFS根文件系统
OneWind 发表于 2007-5-29 15:36:00

一. t91sam9263是atmel arm9系列芯片新的一员,使用ARM926EJ-S ARM内核,有DSP扩展指令。支持cmos摄像头的itu656输入接口,支持LCD接口最大分辨率支持到2048x2048。200MHz的时钟能够获取到220mips的运算能力。支持linux操作系统,支持wince操作系统。

   老外已经在linux下移植了ffmeg工程,能够流畅的播放视频文件(352x288),看demo后不仅热血沸腾,呵呵心想移植个街机模拟器如何?

要动手时发现AT91SAM9263EK使用的是cramfs根文件系统,移植或者开发应用很不方便的,需要用U盘拷来拷去的。工欲善其事,必先利其器,于是决定搞个NFS根文件系统的版本以方便后续的移植工作,算是迈出街机模拟器工作的第一步吧。

二.建根文件系统:

a) 拷贝ATMEL的linux demo里的rootfs_lnxdemo.cramfs文件到宿主机的:/home目录下。

b) 在/home目录下创建tmp目录:mkdir tmp 。

c) 在/home目录下挂载cramfs文件系统镜像:
mount -t cramfs rootfs_lnxdemo.cramfs tmp/ -o loop

d) 进入tmp文件目录查看根文件系统是否齐全。
cd tmp

e) 修改根文件系统的rsS启动加载教本。

因为Atmel提供的cramfs根文件系统默认是启动触摸屏校正程序和ffmpeg播放器的,但是我的目的是移植街机模拟器,要的启动后进入shell里。
cd tmp
vim etc/init.d/rcS删除触摸屏和ffmpeg相关的脚本。然后保存退出。

f) 备份新的根文件系统:
tar cjvf nfsroot.tar.bz2 tmp

g) 卸载cramfs文件系统:
做过nfsroot根文件系统后要把卸载cramfs从tmp卸载掉。
Umount tmp

注意:现在的rootfs_lnxdemo.cramfs的已经不能够在用于atmel的linux demo了。

三. 配置NFS服务器

a) 当然是要先安装nfs服务器软件包的啦。

b) 创建exports 文件:
vim /etc/exports
添加:
/home/target/ 192.168.2.0/255.255.255.0(rw,no_root_squash)
/home/target就是NFS根文件系统的一级目录,由nfsroot.tar.bz2解压得来,包含有bin,etc,usr,mnt,dev,var等等,包含有linux启动运行所需要的一切。

c) 安装dhcpd服务包软件

d) 配置dhcpd

e) 启动nfs,启动dhcpd,portmap
service nfs restart
service protmap restart
service dhcpd restart

f) 测试服务器配置是否成功:
mount 192.168.2.46:/home/target /mnt
ls /mnt

四. 配置linux内核:
进入打过at91补丁的linux2.6内核源代码树的根目录
make menuconfig进入内核配置程序。

1. 选中Networking --->
Networking options --->

  • IP: kernel level autoconfiguration
  • IP: DHCP support
  • IP: BOOTP support
  • IP: RARP support

    2. Device Drivers --->
    Block devices --->
    <*> Network block device support

    3. 选中Device Drivers --->
    Ethernet (10 or 100Mbit) --->
    <*> Atmel MACB support
  • Atmel MACB TX buffers in internal SRAM

    4. 选中File systems --->
    Network File Systems --->
    <*> NFS file system support
  • Provide NFSv3 client support
  • Provide client support for the NFSv3 ACL protocol extension
  • Provide NFSv4 client support (EXPERIMENTAL)
  • Root file system on NFS

    五. 运行新内核,进行测试
    1. 重新编译内核,至于启动参数这里可以不去理它因为我们要从u-boot传递启动参数。
    make uImage

    2. 使用u-boot或者是sam-ba把uImage烧入nand flash。

    3. 启动u-boot配置启动参数:
    setenv bootargs
    mem=64M
    console=ttyS0 115200
    mac=00:60:6E:42:BA:80
    root=/dev/nfs
    nfsroot=192.168.2.46:/home/target
    ip=192.168.2.40:192.168.2.46:192.168.2.1.255.255.255.0:::eth
    0: off
    然后保存参数:saveenv

    4. 重新启动系统:u-boot加载内核,内核运行,这时候内核提示:nfs没有响应,后分析没有道理呀, 发现init进程已经运行,于是查看rcS文件发现里有对ip的设置难怪呀,删去相关的东西,在重新启动一切OK.

    六. 总结:
    在测试的过程中发现u-boot经常提示:
    DM9161A PHY Detected
    No link
    MAC: error during RMII initialization
    End of Autonegociation
    这样的错误,只要有这样的错误出现NFS肯定挂不上,想是u-boot有bug换高版本的吧,于是下载了个1.1.6的故障依旧,没有办法,只有看代码了,最后终于发现是检测DM9161时的超时时间设置的不够,修改后工作正常。

    cd uboot/include/configs/
    vim at91sam9263ek.h
    改#define AT91C_ETH_TIMEOUT 30000
    为#define AT91C_ETH_TIMEOUT 300000
    重新编译u-boot就可以了。
  • 有关CRAMFS文件系统简介:

    CRAMFS文件系统是由Linux Torvalds编写的专门针对闪存设计的只读压缩文件系统。

    与RAM disk方式不同,CRAMFS文件系统不需要一次性地将文件系统中的所有内容都解压到内存中,而只是在系统需要访问某个数据时,马上计算出该数据在CRAMFS中的位置,将其实时的解压到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据

    源文件:从下载cramfs-1.1.tar.gz

    # tar -zxvf cramfs-1.1.tar.gz
    # cd cramfs-1.1
    # make

    经过以上步骤会生成两个可执行文件:
    mkcramfs和cramfsck;
    把这两个可执行文件拷贝到/bin 目录下,就可以使用相应的命令了;

    命令使用:
    mkcramfs工具用来创建CRAMFS文件系统

    # mkcramfs dirname outfile
    cramfsck工具用来进行CRAMFS文件系统的释放和检查

    # cramfsck -x dirname filename
    -x dirname 表示释放到dirname所指定的目录中.

    例如:
    mkcramfs root root.cramfs 解压*.cramfs 文件
    cramfsck -x root root.cramfs 压缩root根文件为root.cramfs

    阅读(1353) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~