分享

TFTP方式烧写内核、NFS挂载

 XeonGate 2015-06-03

驱动开发前期准备工作(NFS挂载):

那为什么要用NFS挂载来作为驱动开发的首选呢?因为你在未开发正确的驱动的时候,你要不停地做修改,如果你每改一次就要烧写一次根文件系统这样很浪费时间,而NFS挂载是把你的根文件系统放在你的开发机上,而开发板上并没有,所以有修改,立刻可以体现在开发板上。

言归正传,首先讲一下应该怎样NFS挂载根文件系统,我也是网上搜集了一些资料和跟同事要了一些资料,如果跟别人写的一样的,那请见谅,因为这些资料我也不知道来源。


平台:Windows7用虚拟机Fedora14

准备已经编译好的u-boot.bin  uImage  rootfs


一、u-boot编译与烧写

         1、打开DNW,选择NOR端口,输入“v”,讲u-boot.bin烧写进nand  flash

         2、选择NAND端口,重启开发板,出现以下界面:(此为超级终端下运行)

          

    

二、U-BOOT相关设置

         1、在超级终端下键入u-boot的命令

# setenv ipaddr ******     (开发板IP)
# setenv serverip ******     (虚拟机IP)

# setenv gatewayip ******   (网关)

           (以上为设置环境参数)

             # saveenv  (保存环境参数到flash)

           (由于要进行tftp下载,所以要先搭建tftp服务器)

三、TFTP服务器搭建(Linux环境下)

         1.安装以下两个软件(安装程序见TFTP安装包)

[root@localhost Packages]# rpm -ivhxinetd-2.3.14-32.fc14.i686.rpm

[root@localhost Packages]# rpm -ivhtftp-server-0.49-6.fc14.i686.rpm

         2.修改配置文件

修改文件vi /etc/xinetd.d/tftp。

主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:

service tftp
{     
        socket_type            =dgram
        protocol              =udp
        wait                  =yes
        user                  =root
      server               =/usr/sbin/in.tftpd
       server_args           =-s /home/user/tftproot  -c
       disable               =no
       per_source            =11
       cps                   =100 2
       flags                 =IPv4
}

修改项server_args= -s    <path>   -c,其中<path>处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件


       3.创建tftp根目录,启动tftp-server

  #mkdir /home/user/tftpboot

  #chmod 777     /home/user/tftpboot

  #/etc/init.d/xinetd restart

这样,tftp-server就启动了。

      4.测试 

可以使用#netstat -a |grep tftp命令察看是否启动tftp服务,如果出现

udp  0 0  *:tftp  *:* 则起动了

检查tftp服务是否打开

[root@localhostbtools]#chkconfig –list

(查看是否有xinetd这一项)

如果tftp的服务没有打开,则用下面命令打开tftp服务开关

[root@localhostbtools]#chkconfig tftp on

重启服务

#/etc/init.d/xinetdrestart

四、下载内核到开发板内存

         1、先确定开发板是否能ping通虚拟机下的Linux,如果是:host192.168.1.111 is alive,那么就表示连接       成功。

         2、将编译好的uImage放入/home/user/tftpboot目录中。(Linux下)

  3、在超级终端下输入:

                   # tftp uImage (将uImage镜像下载到开发板的SDRAM的0x30008000位置)

         

# nand erase 80000 size     (擦除Nand Flash中80000开始大小为size的空间)

# nand write 30008000 80000 size  (将内存中30008000位置开始的内容拷贝到NandFlash 中80000开始的位置大小为size)

 

备注:TFTP下载内核映像时传输的数据总量会在完成时显示(down_size),而烧写 nand_flash时数据大小必须是2k对齐的,所以我们要对下载的数据大小做一点小小的改变以适应nand_flash,如果down_size百位>8,则size= down_size+1000 后把低3位清零;如果down_size百位<8,则size = down_size低3位清零+800。比如down_size **a967,则size = **b000;down_size **a567,则size = **a800。


如:

      

      


五、利用nfs挂载根文件系统

    1、在Linux下设置共享目录

         运行命令:gedit/etc/exports

        编辑nfs服务的配置文件(第一次打开时文件是空的),添加以下内容

        /opt/rootfs *(rw,sync,no_root_squash)  //自己根文件系统路径

  *:表示所有的客户机都可以挂载此目录

  rw:表示挂接此目录的客户机对该目录有读写的权限

        no_root_squash:表示允许挂接此目录的客户机享有该主机的root身份

     2、运行命令:service iptables stop 关闭防火墙

     3、启动NFS 服务

在命令行下运行:

#/etc/init.d/nfs start

这将启动nfs 服务,可以输入以下命令检验 nfs 该服务是否启动。

# mkdir /mnt/nfs

# mount -t nfs -o nolock 192.168.1.232(主机IP):/opt/rootfs(需要挂载的文件的路径)   /mnt/nfs 

如果没有出现错误信息,您将可以浏览到 /mnt/nfs 目录中的内容和/opt/rootfs 是一致的。

使用这个命令可以停止 nfs 服务:

#/etc/init.d/nfs stop

六、在U-BOOT设置环境变量

      1、setenv bootargs "noinitrd root=/dev/nfs   rw  nfsroot=192.168.1.232:/opt/rootfs/ ip=192.168.1.25:192.168.1.232:192.168.1.254:255.255.255.0 console=ttySAC0,115200       init=/linuxrc  mem=64M"

           (192.168.1.25)是开发板的临时IP

           (192.168.1.232)开发主机IP

           (192.168.1.254)目标板上网关

           (255.255.255.0)子网掩码

           注意:如果使用的是虚拟机,则使用虚拟机的IP。

     2、# setenv bootcmd  “nand read 30008000 80000500000;bootm 30008000”

   (将bootcmd命令改成上面的内容,因为我们内核镜像在Nand Flash的位置是80000,所以u-boot执行完之后,内核的入口点就在80000这个位置。)

     3、重启开发板。


只要保持网络联通,就能够启动Linux内核及其根文件系统了,第一次写博客,有什么错误敬请谅解。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多