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文件夹
  2. 在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  
  2. 注销用户,重新登录用户后生效

    或者:

    # source /root/.bash_profile
    // 使配置文件生效
  3. 检查交叉编译环境是否安装成功:
# 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
        ^ 根文件系统;

原文地址:https://www.cnblogs.com/microxiami/p/8523025.html

时间: 2024-10-10 21:22:13

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

解剖嵌入式设备开发时以SD卡启动时SD卡的存储结构(以三星exynos4412为例)

目前面对高性能产品的嵌入式开发中,用SD卡来代替以往的JLINK显得备受大家喜欢,而且MCU厂家也对以SD卡启动的支持度越来越大,反而对JLINK不在那么重视(不过依旧保留着).一些以开发开发板的公司在提供他们自身的bootloader(只是其中一部分是他们自身的代码而已,下面我会讲到这一点)时其原码并不对外公开,不过大家喜欢的u-boot的原码是开源的,可是像友善之臂他们的那样,还得通过他们的superboot来把u-boot二进制代码载入到LAND FLASH,EMMC等这类外部rom设备中

制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统

转自网络,供学习记录使用,红色部分是我实验时,这篇文章和网站稍有出入的地方. 目的:制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统 在http://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/quickstart/zynq(姑且把这个链接成为链接1吧)链接中找到 图1 点击绿色字体的链接,下载镜像原始文件.这里有不同时期的版本,本说明中选择 图2 下载的原始文件为:2014_R2-

[i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统

转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/details/44536447 参照2:http://blog.csdn.net/girlkoo/article/details/44626011 2017-02-04 22:52:54 目录: 本文的目的是,完成一个从sd卡启动的一个纯净版的linux系统移植,其实就是一个很裸的根文件系统,后期有空会试着把

嵌入式Linux裸机开发(十)——SD卡启动

嵌入式Linux裸机开发(十)--SD卡启动 存储设备分类: 磁存储设备:软盘.硬盘.光盘.CD.磁带 Flash:NandFlash.NorFlash 缺点:时序复杂,无坏块处理机制,接口不统一 NandFlash:MLC(可靠性差,容量大).SLC(可靠性高.容量小) 扩展卡式Flash:SD卡.MMC卡.MicroSD(TF卡) 内部为NnadFlash存储颗粒,外部封装了接口,接口标准统一.通用. 缺点:频繁使用导致卡槽接触不可靠 iNand.MoviNand.eSSD: 内部为Nand

不从SD卡启动树莓派2

本文你可以学到: berryboot使用,kali安装,开挂的MobaXterm,以及关于通过LABEL和UUID挂载的小技巧. 本文默认你有一定Linux基础,同时针对刚入门的水平,因为这是我的折腾记录.不懂可以留言或者email. 首先要明确的是现在暂时没有完全脱离sd卡的方法,因为Pi是默认从SD卡启动的.只是实现了将系统放在别的地方(U盘,硬盘,局域网),但是还是要有一张sd卡(可以很小,64M以内都可以)作为/boot来引导,无法完全做到从U盘启动,但是启动后可以拔掉SD卡运行. 我只

Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建 * * 声明: * 1. 以下所有的shell命令都是在root权限下运行的; * 2. minicom(U-Boot)指的是用minicom连接开发板作为U-Boot的终端; * 3. 文中在需要往文件中

6410开发板sd卡启动时烧写u-boot.bin以及u-boot-spl-16k.bin步骤

参考文档:<SMDK6410_IROM_APPLICATION NOTE_REV 1.00>(可以从这里下载到> 参考博客:Tekkaman的博文<u-boot-2010.09 for mini6410 (add MMC support)> <Tiny6410_SMDK从SD卡直接启动裸板代码> <使uboot支持S3C6410的SD启动> <S3C6410开发全纪录(一)<还原SD卡启动的真相>> sd卡启动布局方式(假定一个

制作SD卡启动自己编译的uboot.bin

README for FriendlyARM Tiny4412 -----------------------------------------------------1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境变量PATH,保证可以正常使用. b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录 tar xzf uboot_tiny4412-201

SBC-7109-454 sd卡启动系统参数设置

首先直接记录结果 在u-boot 中修改参数 #define AUTO_UPDATESYS */ 直接把这个参数注释掉. 这个参数是原来用来升级nor flash 启动系统设置的一个参数,也就是说, 这个参数的存在是为了升级原来nor flash的系统. 注释掉以后,插入sd卡启动便不会自动在u-boot阶段烧写系统到nor flash上面. 注释完以后,看到下面的参数 1 #define CON \ 2 "console=ttyO0,115200n8\0" \ 3 "opt