linux3.5 嵌入式dnw,Tiny4412从零搭建linux系统之从emmc启动

一、基本开发环境

交叉编译工具链版本为4.5.1

u-boot为友善之臂提供:https://github.com/friendlyarm/uboot_tiny4412

linux内核版本为3.5,友善之臂提供

busybox版本为1.17.2,去官网下载

linux下的dnw工具:https://download.csdn.net/download/tech_pro/10405993

PC机版本为:Ubuntu12.04 64bit

二、编译u-boot和生成BL2的工具

2.1 编译u-boot

cd uboot_tiny4412/

make tiny4412_config

make

2.2 编译生成BL2的工具

cd sd_fuse

make

make -C sd_fuse

三、编译内核

tar xzf linux-3.5-20150929.tgz

cd linux-3.5/

cp tiny4412_linux_defconfig .config

make menuconfig:去掉 Support TrustZone-enabled Trusted Execution Environment

make zImage

四、制作根文件系统

4.1 根文件系统构建

4.1.1 编译、安装busybox

tar xzf busybox-1.17.2-20101120.tgz

make menuconfig :添加交叉编译选项(arm-linux-)

make

make CONFIG_PREFIX=/work/nfs_root/francis_linux_fs install

4.1.2 安装lib库

通过在工具链的安装目录中执行:find -name *lib* 命令找到库的目录,本人使用的工具链的目录是:

/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib

/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib

将工具链中lib库拷贝到自己的根文件系统中:

mkdir lib

mkdir usr/lib

cd /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib

cp *so* /work/nfs_root/francis_linux_fs/usr/lib -d

cd /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib

cp *so* /work/nfs_root/francis_linux_fs/lib -d

4.1.3 构建etc目录

a、创建inittab文件,填入如下内容:

1 # /etc/inittab

2 ::sysinit:/etc/init.d/rcS

3 console::askfirst:-/bin/sh

4 ::ctrlaltdel:/sbin/reboot

5 ::shutdown:/bin/umount -a -r

b、在etc目录下创建init.d目录,并在init.d目录下创建一个rcS脚本文件,文件内容如下:

1 #!/bin/sh

2 mount -a

3 mkdir /dev/pts

4 mount -t devpts devpts /dev/pts

5 echo /sbin/mdev > /proc/sys/kernel/hotplug

6 mdev -s并给这个文件加上可执行权限:chmod +x rcS

c、在etc目录下创建fstab文件,  填入如下内容:

1 # device mount-point type options dump fsck order

2 proc /proc proc defaults 0 0

3 tmpfs /tmp tmpfs defaults 0 0

4 sysfs /sys sysfs defaults 0 0

5 tmpfs /dev tmpfs defaults 0 0

4.1.4 构建dev目录,在这个目录下添加两个设备文件:console和null,执行如下命令

sudo mknod console c 5 1

sudo mknod null c 1 3

4.1.5 构建其他目录

mkdir proc sys tmp mnt root

4.2 根文件系统镜像文件制作

dd if=/dev/zero of=francis_linux_fs_64M.img bs=1M count=64

sudo losetup /dev/loop0 francis_linux_fs_64M.img

sudo mkfs.ext4 /dev/loop0

cd /work/nfs_root/francis_linux_fs/

sudo mount /dev/loop0 /mnt

sudo cp * -rfd /mnt

sudo umount /mnt

sudo losetup -d /dev/loop0

五、烧写u-boot

为了将u-boot烧写到emmc中,有两个准备工作要做:烧写u-boot到SD卡中和对emmc进行格式化并分区。

5.1 烧写u-boot到SD卡中

首先将SD卡通过读卡器插入电脑,让linux主机可以识别它,可以通过ls -l /dev/sd*命令来查看具体的SD卡所对应的块设备名称,本主机识别的SD卡的设备名为/dev/sdc;然后在u-boot的根目录中执行以下命令来烧写u-boot到SD卡中:

cd sd_fuse/tiny4412

sudo ./sd_fusing.sh /dev/sdc

5.2 对emmc进行分区和格式化

fdisk -c 1 320 2057 520

fatformat mmc 1:1

ext3format mmc 1:2

ext3format mmc 1:3

ext3format mmc 1:4

5.3 从SD卡启动u-boot并通过dnw工具来下载u-boot到emmc中

5.3.1 安装dnw工具在linux主机上

tar xzf dnw-linux.tar.gz

cd dnw-linux/

make

cd src/driver/

sudo insmod secbulk.ko:如果不配置linux,则每次重启linux时都需要加载这个驱动

cd ../dnw/

sudo cp dnw /usr/local/bin

5.3.2 通过dnw把u-boot下载到emmc中

首先需要制作bl2.bin这个文件,进入u-boot根目录下的sd_fuse目录,执行如下命令:

./mkbl2 ../u-boot.bin bl2.bin 14336    然后将u-boot下载到emmc中,执行如下命令:

Board: emmc open 1

Board: dnw

PC : sudo dnw sd_fuse/tiny4412/E4412_N.bl1.bin

Board: mmc write 1 0xc0000000 0 0x10

Board: dnw

PC : sudo dnw sd_fuse/bl2.bin

Board: mmc write 1 0xc0000000 0x10 0x1C

Board: dnw

PC : sudo dnw u-boot.bin

Board: mmc write 1 0xc0000000 0x30 0x21D

Board: dnw

PC : sudo dnw sd_fuse/tiny4412/E4412_tzsw.bin

Board: mmc write 1 0xc0000000 0x2c0 0xB8

Board: emmc close 1

六、通过fastboot烧写内核和根文件系统

将开发板设置为emmc启动,在u-boot命令行模式下让开发板执行:fastboot

在PC机上(装有fastboot命令,这个可以百度搜索)执行下面命令下载内核和根文件系统镜像:

fastboot flash kernel zImage

fastboot flash fat francis_linux_fs_64M.img

fastboot reboot

在u-boot下设置一下启动参数:

set bootargs "root=/dev/mmcblk0p1 rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc ctp=2 lcd=S70"

set bootcmd "movi read kernel 0 0x40008000; bootm 0x40008000"

save

最后在u-boot命令行模式下输入boot命令直接启动linux系统或者重启来启动linux系统。

七、开发板挂接NFS文件系统

首先要确保linux主机安装有NFS服务,并且在配置文件中将自己制作的根文件系统目录添加进去,在u-boot的启动参数中要设置一下参数(IP地址和服务器IP地址要根据实际情况来设置,保证它们在同一个网段):

set ipaddr 10.66.13.11

set gatewayip 10.66.13.1

set serverip 10.66.13.60

set bootargs "root=/dev/nfs nfsroot=10.66.13.77:/work/nfs_root/francis_linux_fs ip=10.66.13.11 console=ttySAC0,115200 lcd=S70 ctp=2"

save    这样就可以使用NFS服务从linux主机上来挂载文件系统了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值