• Exynos4412从SD卡启动的简单网络文件系统制作


    Exynos4412从SD卡启动的简单网络文件系统制作

    1. 简介

    嵌入式系统能够在开发板上正常运行,需要先进行系统配置,一个完整的嵌入式系统应该包含的几个部分::uboot,kernel,rootfs,appfs。这几部分在ARM板Flash上的位置关系如下图所示:

    嵌入式系统分区结构

    注:图片来源于韦东山老师的《嵌入式Linux应用开发完全手册》

    rootfs可以不用添加到开发板,而是部署到PC机上,开发板在运行完kernel,要挂载rootfs时,可以通过NFS网络挂载到设定好的PC机上的文件系统上。

    操作系统: 内核 + 文件(应用, 配置, 设备, ...);
    
        bootloader: u-boot (交互界面) # lsX
                        help
    
        kernel    : linux  (没有交互)
        filesystem: rootfs android qt_rootfs ... 
                           ....    ....
                    shell
    

    2. 安装工具

    需要用到的安装工具包及源码包如下:

    2.1 安装交叉编译工具

    交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发、编译速度。
    在编译uboot、内核、busybox、程序文件之前需要安装兼容开发板的交叉编译工具

    参考Exynos4412交叉编译环境搭建

    检测系统是否已经安装有交叉编译环境:

    # arm-linux-gcc -v  
    bash: arm-linux-gcc: command not found  
    

    安装步骤:

    1. 找到arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 所在路径,并解压压缩文件
    # tar xf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz   
    # ls  
    arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz  opt  
    // 解压后得到一个opt文件夹
    
    1. 在usr/local/目录下创建文件夹,并将解压缩的文件夹./opt/FriendlyARM/toolschain/4.5.1/拷贝到/usr/local/arm/目录:
    # mkdir /usr/local/arm  
    # cp opt/FriendlyARM/toolschain/4.5.1/ /usr/local/arm/ -rf  
    
    1. 修改环境变量:
    # vim /root/.bash_profile   
    // 在文件末尾添加:  
    PATH=/usr/local/arm/4.5.1/bin/:$PATH  
    export PATH  
    
    1. 注销用户,重新登录用户后生效
      或者:
    # source /root/.bash_profile  
    // 使配置文件生效
    
    1. 检查交叉编译环境是否安装成功:
    # arm-linux-gcc -v  
    ......  
    gcc version 4.5.1 (ctng-1.8.1-FA)  
    // 交叉编译环境安装成功 
    

    检测到交叉编译环境版本为4.5.1,安装成功。

    2.2 Minicom串口工具安装及配置

    参考Minicom串口工具安装及配置

    2.3 安装fastboot工具

    2.4 安装NFS服务

    现在多数Linux发行版都会自带NFS服务,一般系统安装时都会默认安装NFS服务,如果没有安装请查询资料自行安装,此处不再叙述NFS安装方法。

    2.5 关闭防火墙

    使用NFS网络文件系统需要系统关闭防火墙,否则,系统启动过程会失败。

    4. 编译内核

    Tiny4412编译内核linux-3.5后,将zImage烧写到SD卡中,启动过程中会出现卡死的现象
    在kernel编译的时候将TrustZone模块去掉,之后再编译,再烧写

    5. 编译uboot并制作SD卡

    参考Tiny4412光盘资料README for FriendlyARM Tiny4412

    5.1 Build uboot

    a) 安装好toolchain
    	(arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)
    	并设置好环境变量PATH,保证可以正常使用。
    
    b) 解压 uboot_tiny4412-20130929.tgz 并进入相应的目录
    	# tar xzf uboot_tiny4412-20130929.tgz
    	# ls
    	uboot_tiny4412_0929  uboot_tiny4412-20130929.tgz
    
    c) 配置 uboot 并编译
    	# cd uboot_tiny4412
    	# make tiny4412_config
    	# make
    
    d) 编译 用于生成bl2 的工具
    	# make -C sd_fuse
    	或者
    	# cd sd_fuse; make
    

    5.2 制作启动 Tiny4412 的SD卡

    a) 先准备一张4G或以上的SDHC卡
    	注意:该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
    
    b) 如果SD卡容量大于等于32G
    	# cd uboot_tiny4412_0929/sd_fuse/tiny4412
    	# vim sd_fusing.sh 
    
    	 36 if [ ${BDEV_SIZE} -gt 32000000 ]; then
    	 37     echo "Error: Block device size (${BDEV_SIZE}) is too large"
    	 38 #   exit 1
    	 39 fi
    	将判断SD卡容量中的处理exit 1注释掉。
    
    c) fusing SD card
    	# 假设SD卡已被PC Linux识别为/dev/sdb, 以root用户运行以下命令即可:
    	# cd sd_fuse/tiny4412
    	# ./sd_fusing.sh /dev/sdb
    

    5.3 使用SD卡启动 Tiny4412

    a) 将已经制作好的SD卡插到Tiny4412板上,拨动S2切换到SDBOOT,同时连接串口线到PC且假设已经准备好。
    
    b) 开发板加电,然后在串口控制台(如:Minicom),按任意键进入uboot命令行模式
    
    c) 对SD卡进行分区
    	输入以下uboot命令即可对SD卡进行分区:
    	# fdisk -c 0 320 806 518
    	重新分区后,可重新格式化FAT分区
    	# fatformat mmc 0:1
    

    5.4 使用fastboot工具烧写内核

    a) 进入fastboot模式以烧写内核镜像
    	使用USB线连接Tiny4412的MICRO_USB口到PC,然后输入以下uboot命令:
    	# fastboot
    
    b) 烧写内核镜像到SD卡
    	首先准备好的内核镜像zImage,进入zImage所在的文件夹
    	在PC端输入以下命令进行烧写:
    	# fastboot flash kernel zImage              (烧写kernel)
    

    6. 制作简单的网络文件系统

    6.2 NFS服务配置

    6.3 使用busybox编译出命令

    解压缩:

    	# tar xf busybox-1.17.2-20101120.tgz    (linux基本命令)
        # cd busybox-1.17.2
    

    编辑:
    配置:

    make defconfig    (默认)
    make menuconfig    (修改默认配置)
            Busybox Settings  --->
                -> Build Options 
                    -> (arm-linux-) Cross Compiler prefix
                        ^^^^^^^^^^ 交叉编译
                        arm-linux-gcc  指定编译工具为交叉编译器;
    
    在busybox中添加命令:rmmod insmod lsmod
    		Linux Module Utilities  ---> 
    			[ ] Simplified modutils
    			[*]   insmod
    			[*]   rmmod
    			[*]   lsmod
    			[*]     Pretty output
    			[*]   modprobe
    			[*]     Blacklist support
    			[*]   depmod
    
    make
    make install
    或者:
    make && make install
    ^        ^
    编译    安装(拷贝)
    
    注意: 编译完时提示; 执行程序需要的依赖库;
        Trying libraries: crypt m
        Library crypt is not needed, excluding it
        Library m is needed, can't exclude it (yet)
    
    
    安装完时提示
    --------------------------------------------------
    You will probably need to make your busybox binary
    setuid root to ensure all configured applets will
    work properly.
    --------------------------------------------------
    
    拷贝安装完的命令:
        cp ./_install/* /nfsroot -rf
    
    
    到这里去执行编译好的程序,会提示执行失败????
        是因为在编译时,选择使用动态链接;要解决该问题,需要将交叉编译工具中的库文件拷贝到nfsroot/lib目录下。
        
    

    6.4 添加库文件和动态链接加载器

    (执行命令需要依赖库)

        mkdir /nfsroot/lib
        cp /usr/local/arm/4.5.1/arm-none-linux-gnueabi/lib/* /nfsroot/lib -rf
           ^ arm 架构的库和加载器
    

    6.5 添加设备文件

    (应用运行需要)

        mkdir /nfsroot/dev /nfsroot/sys /nfsroot/proc /nfsroot/tmp
        mkdir /nfsroot/etc
    
        mkdir /nfsroot/etc/init.d
    

    6.5.1 编辑启动脚本:

        vim /nfsroot/etc/init.d/rcS
            #!/bin/sh
    
            //挂载虚拟文件系统:
            //    proc虚拟文件系统 : ps top 
            //        kernel运行状况, 进程信息;
            /bin/mount -t proc  none /proc
    
            //    sysfs虚拟文件系统: mdev
            //        kernel中所有的支持的设备信息;
            /bin/mount -t sysfs none /sys
    
            //    tmpfs虚拟文件系统: 
            //        断电清空数据/dev /tmp
            /bin/mount -t tmpfs none /dev
            //                         ^^^^ 
            ///dev实时描述当前kernel中支持的所有设备的节点;
    
            //    tmpfs同上;
            /bin/mount -t tmpfs none /tmp
    
            //mdev -s : 扫描/sys目录, 在/dev目录下生成设备节点;
            //busybox中有mdev, x86下没有;
            /sbin/mdev -s
    
            //支持热插拔; 需要kernel监听设备的插入拔出并调用/sbin/mdev命令;
            echo /sbin/mdev > /proc/sys/kernel/hotplug
    

    设置脚本的执行权限:

        chmod 777 rcS
    

    6.5.2 编辑init进程启动配置文件:

        vim /nfsroot/etc/inittab
            系统启动自动执行脚本:
            ::sysinit:/etc/init.d/rcS    (系统启动时执行)
    
            执行完脚本,执行shell, 指定shell输入输出终端ttySAC0:
            ttySAC0::respawn:/bin/sh    (任何时候都执行)
    
    注意: 不需要添加inittab; 
        ramdisk-u.img --> inittab --> rcS
            ^ 根文件系统;
  • 相关阅读:
    PKUSC 2018 题解
    [bzoj 1758] 重建计划
    bzoj 5329 [SDOI2018] 战略游戏
    bzoj 5285 [HNOI2018] 寻宝游戏
    Django 之认证模块
    Django之form表单
    Django 之AJAX
    Django 之中间组件
    Django之 Cookie,Session
    Django之F和Q查询等其他查询
  • 原文地址:https://www.cnblogs.com/microxiami/p/8523025.html
Copyright © 2020-2023  润新知