目录
一、配置交叉编译器
1、在Windows下载压缩包
2、在虚拟机安装交叉编译器
2.1、解压到指定目录
2.2、编写激活脚本并激活
2.3、设置软连接
二、制作文件系统
1、分配空间
1.1、制作64M的镜像文件,命名为rootfs01.ext3
1.2、 用ext3格式化上一步的镜像文件
2、填充空间
2.1、挂载镜像文件到一个目录
2.2、利用busybox制作可执行文件
2.3、拷贝动态库到根文件系统里
2.4、配置文件
3、 卸载空间
三、使用QEMU实现vexpress-ca9板卡的linux启动
1、安装qemu
2、编译Linux内核
2.1、下载linux内核
2.2、配置内核(必须激活编译器)
2.3、 编译内核镜像
2.4、生成设备树文件
2.5、拷贝生成文件
3、编译启动脚本
四、使用nfs实现共享
1、nfs服务安装与配置
2、配置ip
2.1、在虚拟机里配置了一个tap0的网卡
2.2、修改启动脚本
2.3、启动qemu,配置虚拟板ip
这个是64bit的交叉编译,可以编译qemu虚拟环境的开发板
$ tar -Jxvf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz -C ../
$ vim env_express.sh 填入
export PATH=/home/venom/sim/gcc-arm-linux-x86_64-gnueabihf/bin:${PATH}
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export ARCH=arm
$ source env_express.sh
$ ln -s arm-none-linux-gnueabihf-gcc arm-linux-gcc
$ arm-linux-gcc -v
$ sudo dd if=/dev/zero of=rootfs01.ext3 bs=1M count=64
dd 命令用于读取、转换并输出数据
if=文件名:输入文件名,即指定源文件。
of=文件名:输出文件名,即指定目标文件
dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=blocks:仅拷贝blocks个块 这里会得到一个64M的文件
$ sudo mkfs.ext3 rootfs01.ext3
$ sudo mount -t ext3 -o loop myrootfs.ext3 my_mnt/
$ sudo mkdir bin dev etc home lib proc sbin sys tmp usr var root mnt
$ sudo mkdir usr/bin usr/lib usr/sbin
$ tar jxvf busybox-1.35.0.tar.bz2 -C ../
$ make defconfig
$ make -j4
$ make install
$ sudo cp -a _install/* ../mymnt/
$ sudo cp -a * 源文件/* 目标文件
源文件: /home/venom/sim/gcc-arm-linux-x86_64-gnueabihf/arm-none-linux-gnueabihf/libc/lib
目标文件:/home/venom/sim/mymnt/lib/
$ sudo vim etc/inittab 填入
::sysinit:/etc/rc.d/rcS
::askfirst:-/bin/sh
$ sudo mkdir etc/rc.d
$ sudo vim etc/rc.d/rcS 填入
#!/bin/sh
/bin/mount -a
# echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /lib/modules/`uname -r`
$ sudo chmod +x etc/rc.d/rcS
$ sudo vim etc/fstab 填入
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
$ sudo umount my_mnt
$ sudo apt install qemu qemu-system-arm qemu-user
qemu-system-aarch64 模拟ARM - 64bit的CPU
qemu-system-arm 模拟ARM - 32bit的CPU
$ echo $ARCH
$ tar -Jxvf linux-5.10.tar.xz -C ../
$ make vexpress_defconfig
期间会报错,直接安装对应文件即可
/bin/sh: 1: flex: not found
sudo apt-get install flex/bin/sh: 1: bison: not found
sudo apt-get install bison -y
$ make zImage -j2
$ make dtbs
$ cp arch/arm/boot/zImage ../backups/boot/
$ cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb ../backups/boot/
$ vim run_vexpress.sh 填入
sudo qemu-system-arm -nographic -M vexpress-a9 -m 512M -kernel backups/boot/zImage -dtb backups/boot/vexpress-v2p-ca9.dtb -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd backups/sdCard/rootfs01.ext3
$ chomd +x run_vexpress.sh
$ sudo apt install nfs-kernel-server
$ sudo vim /etc/exports 填入
/home/venom/work/nfs_share *(rw,sync)
$ service nfs-kernel-server restart
$ sudo exportfs
sudo tunctl -u venom -t tap0
sudo ifconfig tap0 192.168.5.1
sudo route add -net 192.168.5.0 netmask 255.255.255.0 dev tap0
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
$ tunctl -d tap0
在原来的run_vexpress.sh最后面添加:
-net nic -net tap,ifname=tap0,script=no
$ ifconfig eth0 192.168.5.101
$ mkdir /mnt
$ mount -t nfs -o nolock 192.168.5.1:/home/venom/sim/nfs_share /mnt
来源于上课笔记,老师是:海牛rocky