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、程序文件之前需要安装兼容开发板的交叉编译工具
检测系统是否已经安装有交叉编译环境:
# 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串口工具安装及配置
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
^ 根文件系统;
Exynos4412从SD卡启动的简单网络文件系统制作的更多相关文章
- 解剖嵌入式设备开发时以SD卡启动时SD卡的存储结构(以三星exynos4412为例)
目前面对高性能产品的嵌入式开发中,用SD卡来代替以往的JLINK显得备受大家喜欢,而且MCU厂家也对以SD卡启动的支持度越来越大,反而对JLINK不在那么重视(不过依旧保留着).一些以开发开发板的公司 ...
- 不从SD卡启动树莓派2
本文你可以学到: berryboot使用,kali安装,开挂的MobaXterm,以及关于通过LABEL和UUID挂载的小技巧. 本文默认你有一定Linux基础,同时针对刚入门的水平,因为这是我的折腾 ...
- Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
/*********************************************************************************** * * linux 3.5,U ...
- [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...
- s5p6818 从SD卡启动程序(制作SD启动卡)
背景: 最近在学习uboot,其中有一步很重要的任务就是需要实现uboot 的验证,没有办法验证uboot是不是自己做的,那么整个开发就会收到阻碍.另外,从公司现在开发的板子来看,uboot从sd卡启 ...
- am335x sd卡启动开启识别emmc kernel 上的改动
sbc 7109-454 sd 卡启动qt系统后一直识别不了 emmc 也就是mmc1口, 一开始以为是硬件初始化的问题,后面又以为是io口复用,最后才知道是根本没有注册mmc1设备. 更改下面的代 ...
- am335x sd卡启动系统参数设置
首先直接记录结果 在u-boot 中修改参数 #define AUTO_UPDATESYS */ 直接把这个参数注释掉. 这个参数是原来用来升级nor flash 启动系统设置的一个参数,也就是说, ...
- 制作SD卡启动自己编译的uboot.bin
README for FriendlyARM Tiny4412 -----------------------------------------------------1. Build uboot ...
- imx6 android SD卡启动
工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...
随机推荐
- WebStorm11
1.下载补丁 1.下载地址:http://pan.baidu.com/s/1gdnrdWv 2.拷贝下载的文件 JetbrainsCrack.jar 到 /bin目录下(是指你的软件安装根目录) 2. ...
- webstorm你不知道的秘密
相信你们用webstorm肯定都会用上下面介绍的Emmet插件这个可以自带的哦 Emmet语法 子代:> 兄弟:+ 父代:^ 重复:* 成组:() ID:# class:. 属性:[] 编号:$ ...
- 浅析Numpy.genfromtxt及File I/O讲解
Python 并没有提供数组功能,虽然列表 (list) 可以完成基本的数组功能,但它并不是真正的数组,而且在数据量较大时,使用列表的速度就会慢的让人难受.为此,Numpy 提供了真正的数组功能,以及 ...
- error: Autoconf version 2.67 or higher is required
error: Autoconf version 2.67 or higher is required 今天linux下遇到这种错误,顺便记录下来. #rpm -qf /usr/bin/autoconf ...
- cloud9 ide
https://github.com/tekacs/cloud9 http://www.pjhome.net/article/Javascript/nodeJS_IDE_cloud9.html htt ...
- iOS通知传值的使用
通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值. 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IB ...
- JavaScript对象创建的几种方式
1 工厂模式 1.1 创建 function createFruit(name,colors) { var o = new Object(); o.name = name; o.colors = co ...
- 关于eclipse的mysql连接配置
打开eclipse,选择Window→Open Perspective→Other→Database Development,然后在右边的导航栏右键点击Database Connections文件夹, ...
- centos/linux下的安装Maven
1.保证该项目安装了JDK 请在系统中输入java -version查看该命令是否存在 如果没有安装JDK请移步到Centos/linux下的JDK安装 2.下载Maven wget http://m ...
- ch7复用类
导出类的初始化是从基类开始向下扩展的,先初始化基类,再初始化由基类继承而来的类. 若类B需要类A中的一些甚至全部方法,但类B实际上不是并不是真正的类A,则可以通过代理的方式在B中实现所需要的A的方法, ...