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

1. 简介

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

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

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

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

2. 安装工具

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

2.1 安装交叉编译工具

交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发、编译速度。

在编译uboot、内核、busybox、程序文件之前需要安装兼容开发板的交叉编译工具

参考Exynos4412交叉编译环境搭建

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

  1. # arm-linux-gcc -v
  2. bash: arm-linux-gcc: command not found

安装步骤:

  1. 找到arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 所在路径,并解压压缩文件
  1. # tar xf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
  2. # ls
  3. arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz opt
  4. // 解压后得到一个opt文件夹
  1. 在usr/local/目录下创建文件夹,并将解压缩的文件夹./opt/FriendlyARM/toolschain/4.5.1/拷贝到/usr/local/arm/目录:
  1. # mkdir /usr/local/arm
  2. # cp opt/FriendlyARM/toolschain/4.5.1/ /usr/local/arm/ -rf
  1. 修改环境变量:
  1. # vim /root/.bash_profile
  2. // 在文件末尾添加:
  3. PATH=/usr/local/arm/4.5.1/bin/:$PATH
  4. export PATH
  1. 注销用户,重新登录用户后生效

    或者:
  1. # source /root/.bash_profile
  2. // 使配置文件生效
  1. 检查交叉编译环境是否安装成功:
  1. # arm-linux-gcc -v
  2. ......
  3. gcc version 4.5.1 (ctng-1.8.1-FA)
  4. // 交叉编译环境安装成功

检测到交叉编译环境版本为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

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

5.2 制作启动 Tiny4412 的SD卡

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

5.3 使用SD卡启动 Tiny4412

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

5.4 使用fastboot工具烧写内核

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

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

6.2 NFS服务配置

6.3 使用busybox编译出命令

解压缩:

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

编辑:

配置:

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

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

(执行命令需要依赖库)

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

6.5 添加设备文件

(应用运行需要)

  1. mkdir /nfsroot/dev /nfsroot/sys /nfsroot/proc /nfsroot/tmp
  2. mkdir /nfsroot/etc
  3. mkdir /nfsroot/etc/init.d

6.5.1 编辑启动脚本:

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

设置脚本的执行权限:

  1. chmod 777 rcS

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

  1. vim /nfsroot/etc/inittab
  2. 系统启动自动执行脚本:
  3. ::sysinit:/etc/init.d/rcS (系统启动时执行)
  4. 执行完脚本,执行shell, 指定shell输入输出终端ttySAC0:
  5. ttySAC0::respawn:/bin/sh (任何时候都执行)
  1. 注意: 不需要添加inittab;
  2. ramdisk-u.img --> inittab --> rcS
  3. ^ 根文件系统;

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

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

    目前面对高性能产品的嵌入式开发中,用SD卡来代替以往的JLINK显得备受大家喜欢,而且MCU厂家也对以SD卡启动的支持度越来越大,反而对JLINK不在那么重视(不过依旧保留着).一些以开发开发板的公司 ...

  2. 不从SD卡启动树莓派2

    本文你可以学到: berryboot使用,kali安装,开挂的MobaXterm,以及关于通过LABEL和UUID挂载的小技巧. 本文默认你有一定Linux基础,同时针对刚入门的水平,因为这是我的折腾 ...

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

    /*********************************************************************************** * * linux 3.5,U ...

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

    转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...

  5. s5p6818 从SD卡启动程序(制作SD启动卡)

    背景: 最近在学习uboot,其中有一步很重要的任务就是需要实现uboot 的验证,没有办法验证uboot是不是自己做的,那么整个开发就会收到阻碍.另外,从公司现在开发的板子来看,uboot从sd卡启 ...

  6. am335x sd卡启动开启识别emmc kernel 上的改动

    sbc 7109-454 sd 卡启动qt系统后一直识别不了  emmc 也就是mmc1口, 一开始以为是硬件初始化的问题,后面又以为是io口复用,最后才知道是根本没有注册mmc1设备. 更改下面的代 ...

  7. am335x sd卡启动系统参数设置

    首先直接记录结果 在u-boot 中修改参数 #define AUTO_UPDATESYS */ 直接把这个参数注释掉. 这个参数是原来用来升级nor flash 启动系统设置的一个参数,也就是说, ...

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

    README for FriendlyARM Tiny4412 -----------------------------------------------------1. Build uboot ...

  9. imx6 android SD卡启动

    工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...

随机推荐

  1. linux 基础信息查询

    Linux下如何查看版本信息   Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然.   1.# uname -a   (Linux查看 ...

  2. eclipse open call hierarchy无效

    问题: Eclipse中选中一个方法,右击选中open call hierarchy,不显示哪些地方调用了这个方法,却显示了这个方法里面调用了那些方法.前阵子还是好的,现在不知道为什么了. 解决: s ...

  3. POJ 2653 Pick-up sticks [线段相交 迷之暴力]

    Pick-up sticks Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12861   Accepted: 4847 D ...

  4. ES6的Symbol

    let s = Symbol(); alert(typeof(s)); // Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比 ...

  5. 运行所选代码生成器时出错:“预期具有协定名称 "NuGet.VisualStudio.IVsPackageInstallerServices" 的1导出 ——VS2015错误记录

    在编写ASP.NET MVC控制器后,右键添加视图时,VS2015报出错误: 运行所选代码生成器时出错:“预期具有协定名称 "NuGet.VisualStudio.IVsPackageIns ...

  6. Flask 开发| Flaskr 开发内容总结

    Flaskr 开发说明 官方文档 http://flask.pocoo.org/docs/0.12/tutorial/ 演示网站 http://flaskr.it592.com/ 涉及到的内容: 连接 ...

  7. 一个网卡配置多个ip配置实现,centos7系统

    仅一个网卡情况下,配置多个ip可以让该设备通过几个ip被访问,或隐藏常用ip,让其他人访问临时ip 一.永久性增加一个IP 方法1: vim /etc/sysconfig/network-script ...

  8. 案例分析——BAT业务https化经历

         一.前言      通常的http访问会遭到中间人攻击.网络嗅探等普通用户感知不到的恶意行为,这些行为会篡改用户浏览页面引导用户访问非法网站.抓取用户的上网行为以及个人信息.严重的会造成用户 ...

  9. Apache服务器安装-apache已经卸载,如何删除注册在系统的服务

    cmd进入windows的命令行客户端,执行:sc delete apache 注意:以管理员的身份删除,同理,此方法也可以删除其他类似的服务.例如sc delete MongoDB.

  10. Mysql5.7在CentOs环境下定时备份数据库

    咱创建一个目录,专门用于存放Mysql的备份文件./data/mysql_bak.写个shell脚本,每分钟备份一次测试以下. 脚本代码: chmod /testdir/backup.sh //给脚本 ...