环境说明:
虚拟机:VMware 12
系统:16.04
配置:1核1G
1. 更换阿里源
sudo vim /etc/apt/sources.list
将全部内容替换:
deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
保存退出,然后更新配置:
sudo apt-get update
2. 安装qemu
安装qemu:
sudo apt install qemu qemu-system-arm
安装桥接工具:
sudo apt-get install uml-utilities
sudo apt-get install bridge-utils
3. 安装交叉编译工具链
sudo apt install gcc-arm-linux-gnueabi
4. 下载编译内核
下载:
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.xz
解压:
xz -d linux-3.16.82.tar.xz
tar -xvf linux-3.16.82.tar
交叉编译:
cd linux-3.16.82
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make zImage
make modules
make dtbs
把 bin 文件都放在一起:
mkdir bin
cp arch/arm/boot/zImage bin/
cp arch/arm/boot/dts/*ca9.dtb bin/
cp .config bin/
5. 制作根文件系统
5.1. 下载、编译和安装 busybox
下载:
wget https://busybox.net/downloads/busybox-1.31.0.tar.bz2
解压:
在这里插入代码片
编译:
cd busybox-1.31.0
make defconfig
make CROSS_COMPILE=arm-linux-gnueabimake install CROSS_COMPILE=arm-linux-gnueabi-
5.2. 制作根文件系统
创建 rootfs 目录:
mkdir rootfs
mkdir rootfs/lib
拷贝 busybox 命令:
cp _install/* -r rootfs/
从工具链中拷贝运行库到 lib 下:
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
创建 4 个 tty 终端设备(c 代表字符设备, 4 是主设备号, 123~4 是次设备号):
mkdir -p rootfs/dev
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
生成镜像:
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
格式化为 ext3 文件系统映像:
mkfs.ext3 rootfs.ext3
先挂载刚才的镜像,然后将文件拷贝到镜像中:
mkdir tmpfs
sudo mount -t ext3 rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
这个 rootfs.ext3 就是制作的文件系统,把它移动到 linux-3.16.82 目录。
6. 启动qemu
进入内核目录 linux-3.16.82,执行如下命令:
sudo qemu-system-arm -M vexpress-a9 -m 512M -dtb bin/vexpress-v2p-ca9.dtb -kernel bin/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3 -net nic,vlan=0 -net tap,vlan=0,ifname=tap0
启动后默认没有配置网卡,配置一下:
ifconfig eth0 192.168.1.111