• TQ210开发板NFS挂载android4.0.4的rootfs的方法


        首先声明的是,我使用的u-boot是自己移植的u-boot2013.01.01而非天嵌官方的那个,至于使用官方的u-boot如何去实现nfs挂载rootfs我没怎么研究过,不过原理方法都是一致的.

    主要分三步:

    1:修改u-boot的环境变量bootargs

    1.1进入u-boot命令行,执行


    #setenv   bootargs    noinitrd     console=ttySAC0,115200    init=/init    root=/dev/nfs rw nfsroot=192.168.1.243:/zsy/bootloader/zsynfs,rsize=1024,wsize=1024   rw    ip=192.168.1.8:192.168.1.243:192.168.1.253:255.255.255.0:linux_by_zsy:eth0:off

    其中

    noinitrd:

        当没有使用ramdisk启动系统的时候,需要使用noinitrd这个参数,但是如果使用了的话,就需要指定initrd=r_addr,size, r_addr表示initrd在内存中的位置,size表示initrd的大小。

    console=ttySAC0,115200:

        console=tty  意思是使用虚拟串口终端设备 。
    console=ttyS[,options] 使用特定的串口,options=bbbbpnx,这里bbbb是指串口的波特率,p是奇偶位,n是指的bits,一般来说直接指定波特率就可以了,其他采用默认设置。console=ttySAC[,options] 和console=ttyS[,options]形式一样。


    init:

        init指的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc, 或者init=/etc/preinit,preinit的内容一般是创建console,null设备节点,运行init程序,挂载一些文件系统等等操作。不过注意了,很多初学者以为init=/linuxrc是固定写法,其实不是,/linuxrc指的是/目录下面的linuxrc脚本,一般是一个连接罢了。在这里是 init=/init。


    root=/dev/nfs:

        使用nfs文件系统时指定root为/dev/nfs,指定root=/dev/nfs之后,还需要指定nfsroot=serverip:nfs_dir,即指明文件系统存在哪个ip的主机的哪个目录下面。在这里是:root=/dev/nfs   rw  nfsroot=192.168.1.243:/zsy/bootloader/zsynfs,rsize=1024,wsize=1024。

        而rw是指定可读可写,关于rsize和wsize,读出(rsize)与写入(wsize)的区块大小 (block size)。这个设定值可以影响客户端与服务器端传输数据的缓冲记忆容量。一般来说,如果在局域网络内 (LAN) ,并且客户端与服务器端都具有足够的内存,那这个值可以设定大一点,比如说 32768 (bytes) 等,提升缓冲记忆区块将可提升 NFS 文件系统的传输能力!但要注意设定的值也不要太大,最好是达到网络能够传输的最大值为限。

    ip:

        指定系统启动之后网卡的ip地址,如果你使用基于nfs的文件系统,那么必须要有这个参数,格式如下:
    ip=ip addr:server ip addr:gateway:netmask:local name:which netcard:off

    which netcard 是指开发板上的网卡,不是主机上的网卡。我这里是 :     

    rw ip=192.168.1.8:192.168.1.243:192.168.1.253:255.255.255.0:linux_by_zsy:eth0:off


    1.2 保存设置好的bootargs变量,直接写入nand中,执行命令:

    #saveenv



    2.修改内核为nfs挂载rootfs

    2.1   找到File systems并进入



    2.2 找到 Network File Systems并进入



    2.3 把 NFSclient support 和 NFS sever support勾上,还有最重要的Root Filesystem on NFS勾选上


    2.4 然后重新编译内核,执行make -j4,我的cpu是4核心的所以用-j4。

    2.5   把内核重新烧写到开发板中吧,我用的是tftp的方法

    #  tftp 0x20008000 zImage.bin

    #  nand erase 500000   500000

    #  nand write.jffs2 0x20008000  0x500000   0x500000  


    3.启动ubuntu的nfs服务

    3.1 ubuntu的nfs配置

    (1)nfs 安装
    apt-getinstall nfs-kernel-server
    apt-get install portmapnfs-common

    (2)编辑/etc/exports,
    增加     /zsy/bootloader/zsynfs   192.168.1.*(rw,sync,no_root_squash)

    其中:192.168.1.*意思是以192.168.1.开头的地址都能访问该目录

    括号中的选项为exports规定的选项,下面解释一下Exports文件中一些选项的含义

    选项                                                 说明

    Ro                        该主机对该共享目录有只读权限

    Rw                       该主机对该共享目录有读写权限

    Root_squash          客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户

    No_root_squash     客户机用root访问该共享文件夹时,不映射root用户

    All_squash             客户机上的任何用户访问该共享目录时都映射成匿名用户

    Anonuid                将客户机上的用户映射成指定的本地用户ID的用户

    Anongid                将客户机上的用户映射成属于指定的本地用户组ID

    Sync                     资料同步写入到内存与硬盘中

    Async                   资料会先暂存于内存中,而非直接写入硬盘

    Insecure                允许从这台机器过来的非授权访




    (3)修改挂载点的属性
    #chmod  777  /zsy/bootloader/zsynfs


    (4)重启nfs
    #sudo  /etc/init.d/nfs-kernel-server     restart
    #sudo /etc/init.d/portmap      restart



    这个时候使用 showmount -e  即可察看刚才设置的挂载点是否出现在挂载列表中



    3.2 一些注意事项

         使用NFS的时候如果不关心系统安全问题可以直接关闭防火墙,如果希望防火墙开着,那么就把对应端口放行就可以使用NFS了,具体方法参考这位仁兄的做法,我就不罗嗦了:http://blog.csdn.net/armeasy/article/details/6005703


    4. 验证

        确保以上3步都奏效后,那么就重启开发板,如果看到挂载到nfs上了那就成功了,初次挂载需要比较长的一段时间才能进入android系统,耐心等吧。







  • 相关阅读:
    四则运算
    屏蔽恶意IP
    Vue企业级优雅实战05-框架开发01-登录界面
    Vue企业级优雅实战04-组件开发01-SVG图标组件
    Vue企业级优雅实战03-准备工作04-全局设置
    Vue企业级优雅实战02-准备工作03-提交 GIT 平台
    802.11ax TWT
    leetcode338
    春招实习面经(已拿阿里/腾讯/亚马逊)
    leetcode weekly contest138
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211360.html
Copyright © 2020-2023  润新知