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主机上来挂载文件系统了。


你可能感兴趣的:(嵌入式系统搭建,配置和安装,嵌入式系统移植)