前言

    Linux系统编程是嵌入式从业人员至关重要的技能,无论是应用工程师还是驱动工程师都应该熟练的掌握Linux编程,我也会话更多的时间再它的学习上,通过阅读讯为的《Linux系统编程》以及《Unix环境高级编程》(APUE)来进一步的学习。

    今天搭建了最小Linux系统;搭建并测试了tftp服务器,便于虚拟机与开发板的文件传输;搭建了NFS根文件系统,更加方便了学习与调试的过程。

最小Linux系统的搭建

    特点:便于学习,但没有图形界面

    需要四个文件

        u-boot-iTOP-4412.bin

        zImage

        ramdisk-uboot.img

        system.img

    busybox的安装与配置

        解压后首先make menuconfig 设置交叉编译工具

        

        然后修改输出目录

        

       最后make      make install

    完善最小Linux文件系统

        创建文件夹:mkdir dev etc lib mnt proc sys tmp var

       

       进入到新创建的etc文件夹:mkdir init.d rc.d

       

        进入新创建的rc.d文件夹

            创建文件家mkdir init.d

        返回system目录,进入var目录

            mkdir lib lock log run tmp

        进入etc目录

            将eth0-setting passwd profile三个文件拷贝进去,将文件的权限改为755

        进入/etc/init.d

            将ifconfig-eth0个rcs两个文件拷贝进去,将文件的权限改为755

        进入/etc/rc.d/init.d

            将netd文件拷贝进去,将文件的权限改为755

        返回到system目录下,进入lib文件夹下

            将编译器的库文件拷贝进去

            cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./lib/

    安装打包软件和编译

        打包工具使用make_ext4fs

        进入/minilinux文件夹

            make_ext4fs -s -l 314572800 -a root -L linux system.img system

    分区并格式化

        使用烧写安卓相同的命令

    烧写

        

    启动

        

tftp服务器的搭建与测试

    搭建服务器

        安装xinetd:apt-get install xinetd

        安装tftp和tftpd:apt-get install tftp tftpd

        建立TFTP的配置文件 vim /etc/xinetd.d/tftp

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

       

    建立服务器的目录:mkdir /var/tftpboot

    重启xinetd服务:sudo /etc/init.d/xinetd restart

    在tftpboot下创建一个文件hello

    打开另外一个终端,输入tftp127.0.0.1连接,get hello来下载hello

    

        下载成功

    开发板实现TFTP文件传输

        4412的开发板制作的文件系统已经支持TFTP客户端命令了,编译Busybox时默认是支持该命令的

        检查虚拟机与开发板在同一网段后就可以开始TFTP文件传输

        首先先将要传输的文件复制到服务器端的目录中:cp hello_arm /var/tftpboot/

       在开发板上将文件下载到开发板:tftp -g -l hello_arm -r hello_arm 192.168.1.127

        改变权限:chmod 777 hello_arm

        运行:./hello_arm
        

实现NFS网络文件系统

    通过网络启动文件系统更加方便学习,但是如果是Android或者Qt的文件系统就太打了,启动速度慢,这么做也就没什么意义了

    最小Linux文件系统相对其他操作系统小很多,所以使用网络文件系统可以方便用户的调试

    搭建NFS服务器

        安装Ubuntu NFS服务:apt-get install nfs-kernel-server

        创建共享文件夹:mkdir /home/topeet/linux

        打开/etc/exports在最后加一句:/home/topeet/linux/ *(rw,sync,no_root_squash)

        sync:资料同步写入内存和硬盘

        no_root_squash:是Ubuntu NFS客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该用户而言,该客户端就具有root权限

       

        

        

        重启portmat服务:/etc/init.d/portmap restart

        

       重启nfs服务:/etc/init.d/nfs-kernel-server restart

        

    测试:mount -t nfs localhost:/home/topeet/minLinux/system /mnt/system

        问题解决:mount.nfs: access denied by server while mounting localhost:/home/topeet/minLinux/system

        进入要共享的目录然后执行:exportfs -a

    挂载成功

        

    配置内核

       先修改最小文件系统的/etc/init.d/ifconfig-eth0

        

        接着修改内核配置来支持NFS文件系统

       先生成支持linux最小文件系统的内核配置文件

        make menuconfig

       

        

       进入Boot options配置界面,在Default kernel command中输入

root=/dev/nfs rw nfsroot=192.168.1.127:/home/topeet/minLinux/system ip=192.168.1.230:192.168.1.127:192.168.1.1:255.255.255.0:iTop:eth0:off rootfstype=ext4 init=/linuxrc console=ttySAC2,115200 

       然后按照前面的步骤烧写系统,不要烧写文件系统(system.img)

       重启

       

      成功进入

     在开发板上创建一个文件:touch hello

     看一下虚拟机上的NFS共享文件夹

     

     说明配置NFS文件系统成功!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐