运行交叉编译工具,创建交叉编译环境
编译busybox
1>:下载一个busybox,我用的是 busybox1.28.4, 解压到工作目录下(~ /目录).
2> : make menuconfig
Settings --->
build options --->
cross compiler prefix (添加交叉编译工具链绝对路径)
/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-
path to sysroot (添加sysroot路径)
/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
additional CFLAGS(配置环境参数)
-march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
additional LDFLAGS(配置环境参数)
--sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
additional LDLIBS(不需要添加外部库)
4> :运价交叉编译工具链的环境变量脚本
. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
5>: 编译根文件系统
make
6> : 将根文件系统加载到根目录下
make CONFIG_PREFIX=/home/fangxin/rootfs install
7> :拷贝编译器运行库
cp -a /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/* /home/fangxin/rootfs/lib
cp -a /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/lib/* /home/fangxin/rootfs/usr/lib
8>:构建etc目录
在etc目录下创建inittab文件,内容如下
- ::sysinit:/etc/init.d/rcS
- console::askfirst:-/bin/sh
- ::restart:/sbin/init
- ::ctrlaltdel:/sbin/reboot
- ::shutdown:/bin/umount -a -r
- ::shutdown:/sbin/swapoff -a
在etc/init.d/目录下创建rcS文件,内容如下
- echo "----------mount all.........."
- mount -a
- echo "----------Starting mdev......"
- echo /sbin/mdev > /proc/sys/kernel/hotplug
- mdev -s
- /bin/hostname -F /etc/sysconfig/HOSTNAME
为inittab和rcS文件添加可执行权限
- chmod a+x inittab
- chmod a+x rcS
在etc目录下创建fstab文件,内容如下
- #evice mount-point type option dump fsck order
- proc /proc proc defaults 0 0
- none /tmp ramfs defaults 0 0
- mdev /dev ramfs defaults 0 0
- sysfs /sys sysfs defaults 0 0
在根目录下创建文件夹
mkdir proc tmp dev sys
在dev下创建console设备
sudo mknod console c 5 1
在etc目录下创建profile文件,内容如下
- PATH=/bin:/sbin:/usr/bin:/usr/sbin
- export PATH
- #set hostname
- HOSTNAME='/bin/hostname'
- export HOSTNAME
- # Set PS1
- PS1='[\u@\h \W]\$'
- export PS1
拷贝主机/etc目录下的passwd和group文件到etc目录下
设置HOSTNAME文件
在etc/sysconfig目录下创建HOSTNAME文件,在文件中写入主机名,我这里写的是fangxin
9>: 安装内核modules
进入内核源码目录,执行 make modules
待编译完成后安装modules,执行指令 make modules_install INSTALL_MOD_PATH=/home/fangxin/rootfs
10>:
打包文件系统 tar -cjvf rootfs.tar.bz2 rootfs
到这,根文件系统就构建完成了
11>:挂载根文件系统
将SD卡插入Ubuntu环境下,挂载SD卡
cat /proc/partitions 插卡SD卡是否识别如下
fangxin@fangxin:~/busybox-1.28.4$ cat /proc/partitions
major minor #blocks name
259 4 1024000 nvme0n1p4
8 0 976762584 sda
8 1 524288 sda1
8 16 7639040 sdb
8 17 7618560 sdb1
挂载SD卡
sudo fdisk /dev/sdb
p -> 查看分区
u -> 切换到sector模式 ,按u然后回车,重复操作直至切换到sector模式。
d -> 删除分区
n -> 新建分区
输入"+20M",指定该分区的起始位置是20M的位置上
回车默认分区在最后位置结束
w -> 按w然后回车,即可保存分区信息
使用mkfs命令格式化新创建的分区,对于移动设备,可以考虑使用ext3或者ext4文件系统,指令如下:
sudo mkfs.ext4 /dev/sdb1 (sudo mkfs.ext3 /dev/sdb1)
由于本人之前制作好的根文件系统是个压缩包,故直接解压到该分区即可
- sudo mount /dev/sdb1 /mnt
- sudo tar jxf rootfs.tar.bz2 -C /mnt
- sudo mv /mnt/rootfs/* /mnt
- sudo rm /mnt/rootfs
- sudo umount /mnt
至此,就完成了根文件系统的制作
配置uboot环境变量
- setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/mmcblk1p1 rw init=/linuxrc'
- setenv bootcmd 'mmc dev 0; mmc read 0x11ffffc0 0x800 0x5000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'
- saveenv
uboot 参数说明
https://www.cnblogs.com/dyllove98/archive/2013/07/11/3184782.html
root=/dev/mmcblk1p1
mmc read 0x11ffffc0 0x800 0x5000 -> 0x800 表示内核从SD卡1M 位置开始读取 ,0x5000表示连续读取 10M
制作完文件系统后,发现用ls 命令的时候,文件名显示有乱码,需要输入以下命令
alias ls='ls --color=never'
alias ll='ls -la --color=never'
参考原文网址如下:
http://wangfeng0817.blog.163.com/blog/static/477385032012712777995/
setenv bootcmd 'mmc dev 1 0; mmc read 0x12000000 0x800 0x4000; mmc read 0x18000000 0x5000 0x800; bootz 0x12000000 - 0x18000000'
setenv bootargs 'init=/linuxrc console=ttymxc0,115200 root=/dev/mmcblk0p1 rw'
alias ls='ls --color=nerver'
alias ll='ls -la --color=never'