linux系统移植(qemu)+文件系统制作(busybox)+nfs

目录

一、配置交叉编译器

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


一、配置交叉编译器

1、在Windows下载压缩包

  • 进入arm官网找到Support&Training

  • 点击Downloads后点击Tools and Software

  • 点击Open Source后打开Downloads

  • 找到:gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz 并下载

         这个是64bit的交叉编译,可以编译qemu虚拟环境的开发板

2、在虚拟机安装交叉编译器

2.1、解压到指定目录

  • 在packages目录解压到sim(上级)目录
$ tar -Jxvf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz -C ../
  • 解压后可以将文件名改短

2.2、编写激活脚本并激活

  • export PATH=编译器的bin目录:$PATH
$ 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

2.3、设置软连接

  • 在编译器的bin目录,为了方便使用,不设置也可以
$ ln -s arm-none-linux-gnueabihf-gcc arm-linux-gcc
  • 查看版本号
$ arm-linux-gcc -v

二、制作文件系统

1、分配空间

1.1、制作64M的镜像文件,命名为rootfs01.ext3

$ 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的文件

1.2、 用ext3格式化上一步的镜像文件

$ sudo mkfs.ext3 rootfs01.ext3

2、填充空间

2.1、挂载镜像文件到一个目录

  • 建议放在同级目录下,假设目录名为my_mnt
$ sudo mount -t ext3 -o loop myrootfs.ext3 my_mnt/
  •     根据FHS标准,建立根文件系统目录
$ sudo mkdir bin dev etc home lib proc sbin sys tmp usr var root mnt
$ sudo mkdir usr/bin usr/lib usr/sbin

2.2、利用busybox制作可执行文件

  • 解压busybox
$ tar jxvf busybox-1.35.0.tar.bz2 -C ../
  • 激活编译脚本
$ make defconfig
$ make -j4
$ make install
  • 拷贝内容到根文件系统里 
$ sudo cp -a _install/* ../mymnt/

2.3、拷贝动态库到根文件系统里

$ sudo cp -a * 源文件/* 目标文件

源文件: /home/venom/sim/gcc-arm-linux-x86_64-gnueabihf/arm-none-linux-gnueabihf/libc/lib

目标文件:/home/venom/sim/mymnt/lib/

2.4、配置文件

  • 一定是在mymnt目录下的etc 不是/etc
  • 编写inittab文件
$ sudo vim etc/inittab 填入

::sysinit:/etc/rc.d/rcS
::askfirst:-/bin/sh
  • 编写etc/rc.d/rcS
$ 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
  • 编写etc/fstab文件,为上一步的mount -a提供脚本支持
$ 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

3、 卸载空间

  • 在mymnt的上级目录
$ sudo umount my_mnt

 三、使用QEMU实现vexpress-ca9板卡的linux启动

1、安装qemu

$ sudo apt install qemu qemu-system-arm qemu-user
  • 输入qemu-system-a然后tab查看

        qemu-system-aarch64        模拟ARM - 64bit的CPU  
        qemu-system-arm            模拟ARM - 32bit的CPU

  •  查看是否激活编译器脚本(输出是 arm)
$ echo $ARCH

2、编译Linux内核

2.1、下载linux内核

  • 解压到工作目录
$ tar -Jxvf linux-5.10.tar.xz -C ../

2.2、配置内核(必须激活编译器)

$ 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

2.3、 编译内核镜像

  • 此过程较长
$ make zImage -j2

2.4、生成设备树文件

$ make dtbs

2.5、拷贝生成文件

$ cp arch/arm/boot/zImage ../backups/boot/
$ cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb ../backups/boot/

3、编译启动脚本

$ 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

  •  注意对应目录是否有对应文件 (boot、 sdCard)
  • 给脚本添加可执行权限
$ chomd +x run_vexpress.sh
  •  运行结果

  •  也可在 qemu 中 输入ctrl+a 抬起后,再输入’x’ 退出qemu

四、使用nfs实现共享

1、nfs服务安装与配置

  • 安装
$ sudo apt install nfs-kernel-server
  • 配置:需要共享的目录的绝对路径    *(rw,sync)
$ sudo vim /etc/exports 填入

/home/venom/work/nfs_share *(rw,sync)
  •     重启服务:
$ service nfs-kernel-server restart
  •     验证:
$ sudo exportfs

2、配置ip

2.1、在虚拟机里配置了一个tap0的网卡

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

2.2、修改启动脚本

在原来的run_vexpress.sh最后面添加:

-net nic -net tap,ifname=tap0,script=no

2.3、启动qemu,配置虚拟板ip

$ ifconfig eth0 192.168.5.101
$ mkdir /mnt
$ mount -t nfs -o nolock 192.168.5.1:/home/venom/sim/nfs_share /mnt
  •  效果图

来源于上课笔记,老师是:海牛rocky

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值