exynos4412从sd卡启动的简单网络文件系统制作(代码片段)

博观而约取,厚积而薄发 博观而约取,厚积而薄发     2022-10-23     628

关键词:

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
        ^ 根文件系统;

exynos4412

用于Exynos4412启动的SD卡布局第0个扇区是保留扇区(Reserved),第1到第16扇区共8KB的空间存放BL1(E4412_N.bl1.bin),从第17到第48扇区的16KB空间用于存放BL2(u-boot-spl.bin),之后的扇区可以根据实际需求自己安排。 SPL(BL2)  SPL是... 查看详情

tiny4412标准版,编译u-boot并烧录到sd卡,从sd卡启动后只打印‘ok’两个字符

...1b;然而在做uboot烧录实验的时候,发现烧录完成从SD卡启动后只打印“OK”两个字符,无法正常进入uboot;然后在网上和友善的论坛也看到有朋友也是出现这样的问题,最后在一个好 查看详情

exynos4412开发板-网络-同一网段

...,发现不少用户对于这个概念非常模糊,导致IP地址或者网络环境稍微有点变化,就无法实现实验。如果没有接触过这个概念,建议将本文档好好看一下,最好手动计算并验证两个IP地址是不是在同一网段。局域网通信中会经常... 查看详情

tiny4412u-boot烧写及根文件系统制作(不进入终端问题)

...可以参考。现在就把我给arm的emmc烧写过程开始说。用sd卡启动,开发板的右下角有个开关控制启动方式,往下是sd卡启动,往上是mm 查看详情

tiny4412标准版,编译u-boot并烧录到sd卡,从sd卡启动后只打印‘ok’两个字符

...1b;然而在做uboot烧录实验的时候,发现烧录完成从SD卡启动后只打印“OK”两个字符,无法正常进入uboot;然后在网上和友善的论坛也看到有朋友也是出现这样的问题,最后在一个好友那边得知友善的tiny4412标准版有... 查看详情

6410下,能不能从sd卡启动系统?要从sd卡启动该做些啥工作

...对应的制作工具?IROM_Fusing_Tool.exe直接可以在PC上制作SD卡启动盘?有没人这样玩过?。。。。。sd卡启动指的是硬件复位后irom中代码直接把sd中前多少数据(6410是8k)考到ram中运行,和eboot有什么关系。6410支持sd卡启动,具体的最好... 查看详情

三星exynos4412四核处理器怎样?

三星Exynos4412在制作工艺上有了很大提升,它采用了三星最新的32nmHKMG工艺,据悉,三星Exynos4412处理器已经达到了Exynos双核处理器的两倍性能,但同时其功耗却只有双核Exynos4210的80%左右。这就意味着搭载Exynos4412机型的续航能力和... 查看详情

能不能在sd卡上装linux系统

参考技术A能,但是在你的机器上能否启动不好说,安装方法与装在u盘的pe系统类似,会装pe就可以。 参考技术B可以实现的,你可以通过SD卡启动uboot,不过加载内核的话,可以通过tftp下载内核加载;也可以通过nand里面的内核,... 查看详情

(待解决)开发板刷系统---破坏bootloader以及从sd卡启动

...iNand中烧入了bootloader和Android系统镜像,如果想要从SD卡来启动,就必须先破坏掉iNand中的bootloader,让其校验失败,从而选择第二启动即从SD通道2启动。  破坏板载iNand中的bootloader的方法,可以参考九鼎的文档,其中提到的在And... 查看详情

制作sd卡文件系统

...下关于文件系统方面的东西  因为根文件系统主要负责启动运行的配置文件,所以linux在启动必须先挂载根文件系统。这样在启动后就可以自动或手动挂载其他文件系统。常见的文件系统类型:存储设备文件系统类型RAMDRAMproc,s... 查看详情

exynos4412的外部中断是如何安排的?

... 平台Linux4.9tiny4412 概述结合tiny4412开发板分析一下Exynos4412的外部中断是如何组织的。 正文在Exynos4412的用户手册第9章InterruptController列出了支持的外部中断: 图1 第1列是按Shared PeripheralInte 查看详情

三星galaxys3的处理器到底是exynos4212还是exynos4412

...产品的支持!galaxys3系列手机CPU:1.4GHz四核处理器(三星Exynos4412CPU)希望对您有帮助,祝您愉快!参考技术A这个要从三星galaxys2说起啦。希望不要嫌我回答长啊。其实我研究三星很久了,看了很多预测,各种新闻,这次很想拿到... 查看详情

exynos4412的补充

...处理器,那么Exynos4412和Tegra3到底有什么区别,这里也来简单对比一下。  首先,Tegra3采用的是40nmFastG工艺制造,功耗相对较大,虽然有伴核,但是那个只能在待机时使用,对于日常使用而言帮助不大。其次,Tegra3的内存仅为... 查看详情

如何从 SD 卡播放视频

...布时间】:2012-06-0311:14:33【问题描述】:我正在创建一个简单的应用程序,它可以从网络上流式传输视频,但现在我想更改代码以便可以播放我的SDCard中的视频文件原代码:UrividFile=Uri.parse("MYSITEHERE");VideoViewvideoView=(VideoView)findVie... 查看详情

魅族搭配的三星exynos4210和4412性能差距有多大呢

参考技术A三星Exynos4412采用了32nmHKMG工艺,功耗和性能都非常强大!Tegra3是45nm的,综合性能Exynos4412强多了!魅族MX2四核就是采用Exynos4412,LZ可以考虑 查看详情

exynos4412交叉编译环境搭建(代码片段)

...DK1506开发板需要软件:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz检测系统是否已经安装有交叉编译环境:#arm-linux-gcc-vbash:arm-linux-gcc:commandnotfound1.安装步骤:1 查看详情

如何通过 Intent 从 SD 卡打开 PDF

...【发布时间】:2012-05-1819:32:09【问题描述】:我正在尝试启动Intent以在我的应用程序的资产文件夹中打开一个pdf。我已经阅读了几十篇文章,但仍然卡住了。显然我需要先将pdf复制到sd卡,然后启动Intent。还是不行。我认为问题... 查看详情

三星exynos4412是arm内核吗

是ARM架构三星Exynos4412与此前双核时代的Exynos4212/4210并无区别,但其最大的改进除了新增两个Cortex-A9处理核心之外,还采用了与Exynos4212一样的32nm高-K金属栅极(HK/MG)低功耗制程工艺,单核心最高主频可达1.4GHz,并且支持双通道LPDDR2... 查看详情