linux内核实验

实验环境:ubuntu 4.15.0-46-generic x86_64 KDE
参考:https://github.com/mengning/mykernel
https://github.com/mengning/menu

1.安装qemu

使用命令

sudo apt-get install qemu # install QEMU

出现错误:
在这里插入图片描述
测试qemu是否以安装:
linux内核实验_第1张图片
安装aqemu:
linux内核实验_第2张图片

2.编译内核

linux-5.0.1

tar -xvf linux-5.0.1.tar
make menuconfig #编译配置
make bzImage -j8
注:编译配置中设置32位内核,内核带调试信息,取消网络模块

测试启动内核
linux内核实验_第3张图片
出现错误,试试不加-kernel
linux内核实验_第4张图片
直接使用aqemu图形界面启动:
linux内核实验_第5张图片
好像使用前需要配置aqemu:
linux内核实验_第6张图片linux内核实验_第7张图片linux内核实验_第8张图片
配置完成后进入界面:
linux内核实验_第9张图片
发现是安装虚拟机的,上面设置没有用。
发现系统上安装了qemu但是启动不了。下面尝试解决。
参考:https://www.linuxidc.com/Linux/2012-11/73419.htm
通过aqmeu过程,find qemu在目录usr/bin
使用软链接替换命令:

sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu

linux内核实验_第10张图片
成功启动。

3.制作根文件系统

	cd ~/linux-exp
	mkdir rootfs
	git clone https://github.com/mengning/menu.git
	cd menu
	gcc -pthread -o init linktable.c menu.c test.c -m32 -static
	cd ../rootfs
	cp ../menu/init ./
	find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img

使用上述命令制作好根文件系统

  • cd …
  • qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
    启动内核:
    linux内核实验_第11张图片

3.编译linux-3.9.4内核

参考:https://github.com/mengning/mykernel
https://blog.csdn.net/haosouwj/article/details/77096936
编译出错:
linux内核实验_第12张图片
解决:
参考:https://blog.csdn.net/qq_32693119/article/details/85541750
https://www.cnblogs.com/zengkefu/p/7103359.html
http://www.cnblogs.com/uestc-mm/p/7511063.html
1.查看gcc版本
linux内核实验_第13张图片
2.安装4.8版本编译器

sudo apt-get install gcc-4.8 g+±4.8

3.配置编译器

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
sudo update-alternatives --config gcc

linux内核实验_第14张图片
4.重新编译
linux内核实验_第15张图片
编译成功。

5.启动内核
linux内核实验_第16张图片
ok!

linux-3.18.6下的menu启动

先准备linux-3.18.6的内核源码,使用gcc-5 版本编译器,进行编译。过程参考linux-3.9.4的编译过程。

1.qemu启动根文件系统(https://github.com/mengning/menu.git)

cd linux-exp/shiyan3
rm menu -rf
git clone https://github.com/mengning/menu.git
cd menu
mv test_fork.c test.c
make rootfs

遇到问题:
linux内核实验_第17张图片百度:/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc

参考:
最近把GCC升级到了 4.8.2 ,结果编译的时候提示以下错误:
/usr/bin/ld: skipping incompatible /usr/local/lib/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/local/lib/libstdc++.a when searching for -lstdc++

/usr/bin/ld: skipping incompatible /usr/local/lib/libgcc_s.so when searching for -lgcc_s

/usr/bin/ld: skipping incompatible /usr/local/lib/libgcc_s.so when searching for -lgcc_s

一看 /usr/local/lib/libgcc_s.so 这个库是32位的,而64位系统默认是的编译64位的程序 ,当然报错了。
原因是MAKEFILE里有这么一行:-L/usr/local/lib , 所有LD默认先找 -L/usr/local/lib 下面的库的,改成 -L/usr/local/lib64就OK啦。
如果还有问题,可以看一下 /etc/ld.so.conf 库路径的顺序:先64位,后32位就OK啦
原文:https://blog.csdn.net/kissnsms/article/details/16116359

查看makefile:
在这里插入图片描述
将 -m32 修改为 -m64 试试:
linux内核实验_第18张图片还是有错误:
linux内核实验_第19张图片

你可能感兴趣的:(linux)