# 本所使用的是ARM Tiny6410开发板。
# 以下所属个人实际操作的来,若有不妥或是不对之处,请多多之处不足之处。
# 部分资源来源网上学习资料。
# 首先要明确:实现镜像文件是用来做什么的,每一步的结果是做什么的。
一.准备ARM,ARM已经烧写了boot,可以下载内核。(有时间将补充此处知识)
二.准备宿主计算机,拥有arm-linux 编译环境(因编译环境而改变)。
三.准备yaffs包 (yaffs2-d43e901.tar.gz)依赖工具包 (zlib-1.2.3.tar.gz)busybox包(busybox-1.22.1.tar.bz2)
——————————————————————————————————————————————————————————
宿主计算机安装镜像文件工具(非root用户记得加sudo)
安装依赖工具:
# tar zxf zlib-1.2.3.tar.gz
# cd zlib-1.2.3
# ./configure && make && make install
这里如果不是 root用户则使用 sudo ./configure && sudo make && sudo make install 如果不行请拆开命令执行
制作 yaffs2 文件系统工具 mkyaffs2image
# tar zxf yaffs2-d43e901.tar.gz
# cd yaffs2-d43e901/utils(虽然 yaffs2-d43e901 中也有makefile 但是我们使用的是 utils 中的makefile)
# make 此时就会生成 mkyaffs2image可执行文件
# cp mkyaffs2image到/uer/bin 这样我们就可以像 ls 等命令 直接用啦~
——————————————————————————————————————————————————————————
配置及编译busybox
建立交叉编译环境,也就是激活arm-linux- 环境
建立图形界面化的依赖工具 Ncurses
# apt-get install libncurses5-dev
图形化的配置
#tar jxf busybox-1.22.1.tar.bz2 (因为使用的 tar.bz2 所以是用 jxf 解压)
# cd busybox-1.22.1
# make menuconfig
这里要留意一个小问题:如果终端的字体太大会使图形界面打不开的哦!
配置的选择(因为初学所以只能简单配置,不涉及的统一采用默认)
Busybox Setings--->
Build Options--->
[ ] Build Busybox as a static binary (no shared libs)
[ * ] Build shared libbusybox
(编译环境) Cross Compiler prefix 我的编译环境 /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-
(/opt/FriendslyARM/toolschain/4.5.1/bin/arm-linux-) Cross Compiler Prefix
Busybox Library Turning--->
[ * ] vi-style line editing commands
[ * ] Fancy shell prompts
Init Utilites--->(默认,不过最好检查一下)
[ * ] init
[ * ] Suport reading an inittab file
[ * ] Run commands with leading dash with controlling tty
[ * ] Support runing init from within an initrd (not initramfs)
Miscellaneous Utilities-->
[ ] inoice
[ ] ubiattach
[ ] ubidetach
[ ] ubimkvol
[ ] ubirmvol
[ ] ubirsvol
[ ] ubiupdatevol
——————————————————————————————————————————————————————————
编译 Busybox
# make clean all
# make install
之后就会生成一个_install 目录 里面有目录 bin sbin usr 和一个链接文件 linuxrc
——————————————————————————————————————————————————————————
构建根文件系统
# mkdir rootfs
# cd /rootfs
# mkdir dev home proc tmp var etc lib etc lib mnt sys usr etc/rc.d
# chmod 777 tmp
# cd dev
# mknod console c 5 1
# mknod null c 1 3
——————————————————————————————————————————————————————————
建立系统配置文件
# cd /rootfs
# vi etc/inittab //inittab 是 init 进程的配置文件,启动后的第一个脚本文件,之后的启动文件都是由它决定
添加内容
::sysinit:/etc/rc.d/rc.sysinit
//指定系统启动后首先执行的文件
#Example of how to put a getty on a seria line(for a terminal)
#no login(启动后进入 shell 环境)
#::respawn:/sbin/getty -L ttyS2 115200 vt100 #use login
#tty::respawn:-/bin/sh
#Stuff to do when restarting the init porcess
::restart:/sbin/init
#Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
::shutdown:/sbin/swapoff –a
# vi etc/rc.d/rc.sysinit //设置脚本文件,里面配置环境变量,主机名,dev 目录环境 ,挂接 /etc/fstab 指定文件系统,建立设备节点和设置IP 等。
添加内容
#!/bin/sh
#Set binary path
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
#Config dev enviornment
mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
#mount all filesystem defined in /etc/fstab
echo "#mount all....."
/bin/mount -a
echo "#Starting mdev....."
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
#Set hostname
/bin/hostname "Loongson-gz"
export LAGNAME=root
#Set ip
#ifconfig eth0 192.168.3.110 up
ifconfig lo 127.0.0.1
# vi etc/fstab //建立执行 mount -a 时,挂接/etc/fstab 指定的文件系统。
添加内容
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /mnt tmpfs defaults 0 0
tmpfs /root tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
# vi etc/profile //inittab 中执行了这样一个语句“::respawn:-/bin/sh”。启动/bin/sh 程序时会启动 ash 的配置信息,而它就是/etc/profile, sh会把 profile 的所有配置全部都运行一遍,因此用户可以把自己的启动程序放在这里。
添加内容
#!/bin/sh
#/etc/profile:system-wide .profile file for the Bourne shells
echo "Processing /etc/profile....."
#set search library path
export LD_LIBRARY_PATH=/lib:/usr/lib:/qte/lib
#set user path
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/exe/
#Set PS1
export PS1='[\u@\h:\w]\$'
alias ll="ls -l"
echo "Done!"
修改系统文件权限
# chmod 755 etc/*
# chmod 755 etc/rc.d/rc.sysinit
拷贝 Busybox 文件
# cp ./Busybox1.22.1/_install/* /rootfs -rf
拷贝 交叉编译 库文件
# cp ./opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* /rootfs/lib/ -d
——————————————————————————————————————————————————————————
制作文件系统镜像
# mkyaffs2image /rootfs rootfs-yaffs2.img
# chmod 777 rootfs-yaffs2.img
——————————————————————————————————————————————————————————
最后用boot烧写,yaffs 根文件就可以了