历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2020年02月15日 | Exynos4412从SD卡启动的简单网络文件系统制作

2020-02-15 来源:eefocus

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  

安装步骤:


找到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文件夹

在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  

修改环境变量:

# vim /root/.bash_profile   

// 在文件末尾添加:  

PATH=/usr/local/arm/4.5.1/bin/:$PATH  

export PATH  

注销用户,重新登录用户后生效

或者:

# source /root/.bash_profile  

// 使配置文件生效

检查交叉编译环境是否安装成功:

# 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

        ^ 根文件系统;


推荐阅读

史海拾趣

FTCAP Fischer & Tausche Capacitor Group公司的发展小趣事

FTCAP Fischer & Tausche Capacitor Group公司的发展故事

故事一:德国制造的坚持

FTCAP Fischer & Tausche Capacitor Group自成立以来,始终坚守在德国本土进行电容器的生产和研发。这一决策源于公司对产品质量的不懈追求。在电子行业,德国制造以其精湛的工艺和严格的质量控制而闻名,FTCAP也不例外。通过缩短研发与生产之间的距离,FTCAP能够确保高效的生产流程和与客户的紧密协作,从而快速响应市场需求,提供高质量的产品。

故事二:多样化的产品线

FTCAP的产品线涵盖了从薄膜电容器到铝电解电容器的广泛范围,满足了不同行业对电容器的多样化需求。公司不仅生产标准规格的电容器,还根据客户的特定需求提供定制化的解决方案。这种灵活性和创新性使得FTCAP在竞争激烈的电子市场中脱颖而出,赢得了众多客户的信赖和好评。

故事三:技术创新与产品升级

近年来,FTCAP不断投入资源进行技术创新和产品升级。例如,公司推出的Enlight Energy Cap系列薄膜电容器,经过重新设计后,不仅性能更加优越,还增加了“Enlight”这一附加属性,进一步提升了产品的市场竞争力。此外,FTCAP还致力于提高电容器的能效和可靠性,以满足日益严格的环保和能效标准。

故事四:行业内的替代解决方案

凭借超过70年的电容器研发和生产经验,FTCAP在行业内建立了良好的声誉。当一些客户面临竞争对手产品无法满足其需求时,FTCAP能够提供定制化的电容器作为替代解决方案。这些定制产品不仅性能优越,而且能够完美匹配客户的设备和应用场景,帮助客户解决燃眉之急。

故事五:团队建设与企业文化

FTCAP的成功离不开其优秀的团队和独特的企业文化。公司注重员工的培训和发展,鼓励员工创新思维和团队合作。在FTCAP,员工们不仅拥有专业的技能和知识,还具备高度的责任感和使命感。他们共同努力,为公司的发展贡献自己的力量。此外,FTCAP还定期举办各种团建活动,增强员工之间的凝聚力和归属感,营造了一个和谐、积极的工作氛围。

GE Industrial Solutions公司的发展小趣事
使用高压测试仪测量输入输出之间的隔离电压,确保满足安全要求。
东软载波(EastSoft)公司的发展小趣事

在国内市场取得成功后,东软载波开始积极拓展国际市场。公司凭借丰富的产品线和领先的技术实力,成功进入中亚、东南亚、非洲和南美等地区,产品在这些地区得到了广泛应用。国际市场的拓展不仅为东软载波带来了更多的业务机会,还进一步提升了公司的品牌影响力和国际竞争力。

Adafruit公司的发展小趣事

在国内市场取得成功后,东软载波开始积极拓展国际市场。公司凭借丰富的产品线和领先的技术实力,成功进入中亚、东南亚、非洲和南美等地区,产品在这些地区得到了广泛应用。国际市场的拓展不仅为东软载波带来了更多的业务机会,还进一步提升了公司的品牌影响力和国际竞争力。

GWM Associates公司的发展小趣事
这是其最显著的特点,通过采用高品质的组件和优化设计技术,能够显著降低噪声对信号的干扰,提高信噪比。
Glorious Sources Co Ltd公司的发展小趣事
在特定场合下,如仓库、博物馆等,利用可听式光探测器电路监测光线变化以触发警报系统。

问答坊 | AI 解惑

电话远程控制电路图

请各位大虾们给我看看下面的电路图是否有问题,那些地方需要改进的,我向实现电话远程控制的,包括振铃检测电路,CPU2051,解码电路MT8870,开关电路,离线/上线/复位电路,电源电路组成。现在赞不用语音电路和受控驱动电路。等测试完成后在另接。请 ...…

查看全部问答>

C8051f410的Smbus问题

我用的C8051f410单片机,I2C设备是PCA9535,用的是中断方式的数据传输,无论我读从设备哪个寄存器,返回的值都是PCA9535的从设备地址0x40.不知道是哪里出了问题。我是参照新华龙的例程写的。这是我的程序: void PCA9535_WriteByte( unsigned char ...…

查看全部问答>

触摸屏截获

Windows Mobile触摸屏(Touch Panel)截获 为了做全屏手写功能,需要把鼠标的事件全部截获过来,研究了一个星期左右,发现有三种方法可以实现。而且对每种方法已经写了测试代码。根据三种方法效果的好坏排序: 1. 用英文手写识别(TRNSCRBR)Touch的 ...…

查看全部问答>

点阵式液晶显示接口

请给位高手帮忙,现在急需一个点阵式液晶显示结合口电路,并说明硬件连接及软件的编程方法!…

查看全部问答>

两个线程不断地访问同一片内存区,需要进行互斥(关键区锁定)吗?其中一个线程修改内存区内容,另外一个线程只是单单读取!

两个线程不断地访问同一片内存区,需要进行互斥(关键区锁定)吗?其中一个线程修改内存区内容,另外一个线程只是单单读取! //=================== 一个线程是不断抓数据放内存区,另外一个线程只是访问这片内存区!!! 我没加什么线程间的 ...…

查看全部问答>

用C#做过智能设备应用程序时怎么没有monthCalendar和dateTimePicker,这样的日期控件?

用C#做过智能设备应用程序时怎么没有monthCalendar和dateTimePicker,这样的日期控件? 工具箱里怎么没有? 怎么加入??…

查看全部问答>

WINCE 驱动

我想学习WINCE 下驱动的开发,想让大家推荐的好的书籍,谢谢。…

查看全部问答>

算法讨论:关于移位操作

现有16个比特,每个比特复制3次,并将这48个比特赋值给一个6*8的矩阵,每一行均是8个数,请问要怎样操作才能达到这样的效果?例如比特是:1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 复制三次: 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 ...…

查看全部问答>

公司逆变器老烧块熔,什么原因造成

用于冶金行业,热轧厂,专门轧不锈钢的逆变器: 用的是西门子6SE70系列的逆变器,所有的逆变器都是大容量的装机柜型,为什么电机在空载的时候或者在轧制的过程中,老烧逆变器的快熔? 烧快熔是有哪些原因引起的,不知道怎么解决?…

查看全部问答>

菜农"友情征婚"香公主~~~

菜农"友情征婚"---两数积的平方是否等于两数平方的乘积? 最近菜农恶补广义相对论和HotWC3密码后,更加迷茫~~~ 感觉数和光一样也会发生“数据扭曲”,困惑之中,期待好心人答复~~~ 答对让俺满意者,俺愿“以身相许”~~~,可别到时“ ...…

查看全部问答>