编译步骤:
1. 建立存放busybox文件的目录。#mkdir /work/busybox -p
2. 建立编译文件存放目录。#mkdir /work/rootfs -p
3. 解压busybox-1.23.2.tar.bz2
4. 配置busybox: 配置方式 #make menuconfig
1) 配置编译器
Busybox Settings --->
Build Options --->
(arm-linux-) Cross Compiler prefix
2) 编译方式为动态库
[ ] Build BusyBox as a static binary (no shared libs) (默认为动态编译)
编译可执行文件的方式:ls , cd ,pwd。
动态编译:arm-linux-gcc 123.c -o app1
静态编译:arm-linux-gcc -static 123.c -o app2
3) 配置安装路径
Busybox Settings --->
Installation Options ("make install" behavior) --->
(/work/rootfs) BusyBox installation prefix
5. 编译源码
#make && make install
l 查看文件的运行环境
命令用法:#file <可执行文件名称或者库名称>
|
完整根文件系统
怎么完善?PC-Linux文件系统进行完善。
l /work/rootfs
1. 完善目录:创建Linux常规目录
#mkdir lib dev etc/init.d home proc sys root opt tmp var -p
2. 拷贝系统的依赖库
依赖库的位置?Busybox是由arm-linux-gcc编译。
库的路径在arm-linux-gcc的安装目录下:
(必须)路径:/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib
(不是必须)路径:/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib
进入到库的路径下敲命令:
|
将依赖库拷贝到根文件系统下的lib目录下。
拷贝过去以后,可以删除掉lib目录下以.a结尾的静态库。 比如:#rm *.a -f
3. 创建设备节点
设备节点目录?dev目录下
手动创建设备节点的命令:mknod
用法:mknod <设备节点的名称> <设备节点的类型> [主设备号 次设备号]
设备节点的类型:c -->字符设备>块设备
需要创建的设备节点:
|
echo“123456799”> /dev/null
4. 拷贝密码和用户组文件
在PC机的/etc目录下拷贝passwd、group文件到开发板的/etc目录下。
修改passwd文件里/bin/bash -> /bin/sh
5. 拷贝文件系统的配置文件
将PC机/etc/fstab文件拷贝开发板的/etc目录下。
6. 拷贝终端配置文件
路径:/work/busybox/busybox-1.23.2/examples/inittab
拷贝到开发板的/etc目录下。
7. 修改inittab文件
|
#console::respawn:-/bin/sh
askfirst表示:进入终端需要按下回车键。
respawn表示:不需要按回车键,直接进入终端。
解析:
::sysinit:/etc/init.d/rcS :系统初始化配置文件(上电执行的文件)。
console:: askfirst:-/bin/sh:定义进入终端的模式和终端使用的脚本解析器。
::ctrlaltdel:/sbin/reboot:定义重启系统的命令
::shutdown:/bin/umount -a -r:关机之前执行的命令。mount和mount是挂载命令。
8. 创建rcS文件
#gedit etc/init.d/rcS
|
rcS:系统上电自动执行的文件。
mdev -s: 会根据内核的驱动自动生成对应的设备节点。
rcS文件需要修改权限:#chmod 777 rcS
9. 创建etc/profile文件
|
1. 根文件系统的网络挂载
(1)配置NFS文件系统的共享路径 (PC机的路径)
# vim /etc/exports
填充共享的路径
|
生效共享文件的方法
#exportfs -r //生效路径
#exportfs -v //查看已经共享的路径
(2)配置PC机的挂载环境
l 关闭防火墙
图像化配置:setup
l 配置网卡的IP
查看网卡的IP地址:ifconfig
设置网卡的IP地址:ifconfig eth0 192.168.18.3 up
重新启动NFS服务器:service nfs restart (执行两次)
l设置虚拟机网卡的挂载方式为桥接模式!
(3)设置UBOOT环境变量
|
格式:
setenv bootargs root=/dev/nfs nfsroot=<服务器IP>:<根文件系统的路径> ip=<开发板IP>:<服务器IP>:<网关>:<子网掩码>::eth0:off init=/linuxrc console=ttySAC0,115200
在UBOOT命令行设置环境变量后,需要保存!---> # saveenv
设置完成后重启开发板,如果正常的话,就挂挂载电脑上的文件系统
挂载失败问题分析:
1./lib目录下的依赖库拷贝错误!(路径:arm-linux-gcc的目录下)
2./etc/inittab文件的内容编写错误。 (4句代码)
3.Linux NFS服务器(PC)与开发板IP不在同一个网段!
4.没有启动NFS服务器(每次挂载不上,先运行一次启动NFS服务器脚本)。
5.NFS服务器的共享路径设置错误或者没有设置(共享路径设置文件: /etc/exports)。
重新设置了共享路径,需要执行exportfs -r。或者重启启动NFS服务器。
6.UBOOT环境变量设置错误。(NFS挂载:需要设置UBOOT环境变量为NFS挂载)。
虚拟机的上网方式需要设置位桥接,桥接到以太网卡(有线网卡)。
命令行格式不显示:(PS1环境变量)
1.profile文件格式错误。(路径:/etc/profile)
/etc/init.d/rcS文件代码编写错误或者没有可执行权限
2. 根文件系统的SD卡挂载
根文件系统挂载方式:2种。
本地挂载:从哪里读取文件系统?D卡或者EMMC。
本地挂载:将文件系统拷贝到SD卡或者EMMC的分区!
SD卡挂载文件系统步骤:
1.对SD卡或者EMMC进行分区。
在UBOOT命令行使用fdisk命令进行分区。
命令:
TINY4412 # fdisk -c 0 2000 300 300
2.格式化
fatformat:FAT格式
ext3format:linux下格式
ext2format:linux下格式
命令:
# fatformat mmc 0:1
# ext3format mmc 0:2
3.挂载网络文件系统
设置UBOOT环境变量:
Setenv Bootargs root=/dev/nfs nfsroot=192.168.18.18: /work/rootfs
ip=192.168.18.123:192.168.18.18:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
设置完记得保存:saveenv
4. 打包根文件系统
进入到PC机上进行打包。
命令:
# tar cvf rootfs.tar /work/rootfs/
rootfs.tar:表示新的压缩包名称。
将rootfs.tar文件拷贝到/work/rootfs/文件中,方便开发板访问!
5.挂载SD卡分区
挂载命令:
mount 用法:mount <需要挂载的设备> <挂载设备的目录>
取消挂载命令:
umount 用法:umount <挂载设备的目录>
开发板的SD卡和EMMC设备命名:/dev/mmcblk0p1
表示设备编号,1表示设备的分区编号。
挂载SD卡的第2个分区到/mnt目录下:
命令:
mount /dev/mmcblk0p2 /mnt/
怎么判断成功?在挂载的目录下会生成一个lost+found。
6. 解压文件系统到SD卡挂载的目录
到挂载目录下敲解压命令:
# tar xvf /rootfs.tar
解压之后,需要将根文件系统文件目录移动到分区的顶层目录(/mnt目录)。
7.取消挂载
命令:# umount /mnt/
注意:不能在挂载目录敲取消挂载命令。
8.设置环境变量从本地(SD卡)挂载
setenv bootargsroot=/dev/mmcblk0p2 rootfstype=ext3 init=/linuxrc console=ttySAC0 lcd=S702
9.挂载成功的效果:拔掉网线,也可以进入命令行。
3. Uboot、内核、文件系统移植进入EMMC启动
EMMC挂载文件系统步骤:
1. 烧写内核和UBOOT。(当前开发板必须从SD卡启动)
|
2. 给EMMC分区(当前开发板从EMMC启动,拔掉SD卡)
|
3. 修改UBOOT环境变量(当前开发板从EMMC启动,拔掉SD卡)
修改环境变量从NFS网络文件系统启动:
set bootargs root=/dev/nfs nfsroot=192.168.18.18:/work/rootfs ip=192.168.18.123:192.168.18.18:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
自动生成设备节点文件的命令:mdev -s
查看分区和文件的大小:df、du
4. 挂载EMMC分区
# mount /dev/mmcblk0p2 /mnt/ |
5. 解压文件系统
# tar xvf /rootfs.tar |
6. 设置uboot环境变量
set bootargs root=/dev/mmcblk0p2 rootfstype=ext3 init=/linuxrc console=ttySAC0,115200