移植最新版本的Linux,并在QEMU仿真平台进行测试运行。Linux5.14.14

这篇还没写完,凑合能看
注意!!!这篇只是完成了移植linux并在qemu运行,后来发现没有按照要求说的要配置config、自定义编译内核等等!
要求是5.14.9,但是最新发行版是5.14.15,稳定版是5.14.14

建议用buildroot,这篇没用到,相当于只完成了雏形,不适合在工程下使用!
建议用buildroot,这篇没用到,相当于只完成了雏形,不适合在工程下使用!
建议用buildroot,这篇没用到,相当于只完成了雏形,不适合在工程下使用!

重要的事情说三遍!buildroot工具更加完善,以后有空再重做一遍…

一、前提-安装arm的交叉编译工具链

如果你之前完成了crosstool交叉编译链的制作,应该也可以用之前做好的。
arm-linux-gnueabi- 这个字段是后面linux内核编译和busybox编译都需要的参数。

打开ubuntu终端,输入
前两句可以不要,一般只输入第三句就行吧,没安装成功的话,出问题了就三句一起

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc-arm-linux-gnueabi

安装完后可用以下命令查看是否安装成功
dpkg -l gcc-arm-linux-gnueabi
出现ii gcc-arm-linux- 4:5.3.1-1ubu amd64 GNU C compiler for the armel arch即表明安装成功
在这里插入图片描述

二 、最新版linux内核的下载与编译

在这里插入图片描述在网站https://www.kernel.org/ ,我们可以看到最新版是5.14.14
可以直接用wget命令下载最新版,如果你看到的版本更高,更改一下版本号数字应该就可以。
接下来,

1、Linux5.14.14的下载

下面三句指令依次是:

①创建一个文件夹。

之后linux内核、qemu安装包、busybox安装包我都会放在kernel这里。

②进入kernel文件夹。

③下载linux内核最新版。

mkdir kernel
cd kernel
wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.14.14.tar.xz

在这里插入图片描述

linux内核下载完成

④解压到当前文件夹

tar -xvf linux-5.14.14.tar.xz
解压完成:
tar -xvf linux-5.14.14.tar.xz

2、 编译linux内核

要在linux-5.14.14文件夹里运行

cd linux-5.14.14

解释一下为什么要在linux-5.14.14用make命令,以为makefile文件在这个文件夹,后面的busybox也是一个道理,busybox文件夹里面也有个makefile
在这里插入图片描述

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

要等一段时间了,如下图,已完成。zImage和dtb的位置要知道在哪。
在这里插入图片描述

三、安装qemu

就这一句,不要去下载最新版6.1的,下面这个2.几的够用了。
我试过安装5.0和6.1的,太麻烦了浪费时间。

sudo apt-get install qemu

查看安装的版本:
qemu-system-arm --version
在这里插入图片描述

四、最新版busybox的下载与编译

https://busybox.net/最新版是1.34.1
下面三步

1、下载busybox

①下载busybox最新版

②解压到当前文件夹

③进入busybox文件夹,准备下一步

wget http://www.busybox.net/downloads/busybox-1.34.1.tar.bz2
tar xjf busybox-1.34.1.tar.bz2
cd busybox-1.34.1

在这里插入图片描述

2、 编译busybox

下面三步时间也需要一段时间哈

make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-

三步完成后如下图所示
在这里插入图片描述

五、移植之前的准备

1、用busybox制作目录

注意!!!以下命令我全部在自己创建的kernel文件夹下运行的,后面的路径全是相对路径比如
rootfs就是/home/steve/kernel/rootfs

①创建rootfs目录(根目录),根文件系统内的文件全部放到这里

mkdir -p rootfs/{
    
    dev,etc/init.d,lib}

②拷贝busybox命令到根目录下

sudo cp busybox-1.34.1/_install/* -r rootfs/

③从工具链中拷贝运行库到lib目录下

sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/

上面三步复制了很多文件,然后rootfs文件夹是这样的:

在这里插入图片描述

④ 创建4个tty端终设备

这一步是吃饱了撑的生成了4个!,只用生成一个就行了hhhh,因为作者也不知道这部是干嘛的。。

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

在这里插入图片描述
下面一节我省略了好几步,虽然运行qemu的时候报错,但凑合能用,如果想做的完善一些,可以看这篇博客,这篇博客翻到下面
https://www.linuxidc.com/Linux/2017-09/146890.htm

2、制作根文件系统镜像

① 生成32M大小的镜像

 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32

② 格式化成ext3文件系统

mkfs.ext3 a9rootfs.ext3

③ 将文件拷贝到镜像中

sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/*  tmpfs/
sudo umount tmpfs

在这里插入图片描述

六、运行qemu

输入以下命令就可以看到qemu系统运行,输入ls可查看文件目录

qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-5.14.14/arch/arm/boot/zImage -dtb  linux-5.14.14/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

上面一行命令可能看不全,如下
我把两个重要路径加粗显示了,
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-5.14.14/arch/arm/boot/zImage -dtb linux-5.14.14/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append “root=/dev/mmcblk0 console=ttyAMA0” -sd a9rootfs.ext3

忘了截图,以后有空再补

七、测试c语言文件

新制作的系统里面没有c语言文件,我们可以在原Ubuntu系统vim hello.c 输入正确的c语言代码,然后用arm-linux-gnueabi-gcc-5 hello.c -o hello生成可执行文件,把它复制到 rootfs文件夹下面(或者直接在这个文件夹下面生成可执行文件),再运行下面三个命令,查询写一下系统文件目录,再次运行qemu,用ls命令就能看到新的文件,然后输入./hello即可测试c语言文件,可以看到输出了hello,测试成功

sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/*  tmpfs/
sudo umount tmpfs

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42112618/article/details/120966115