交叉编译Linux源码

QEMU调试linux内核

1. 准备工具

首先在linux中安装以下工具

sudo apt install gcc build-essential bison flex gettext tcl sharutils libncurses-dev zlib1g-dev exuberant-ctags g++ texinfo patch vim libtool bc git

下载如下代码:

linux内核代码 https://www.kernel.org/

busybox工具包 https://www.busybox.net/

解压busybox文件:

 tar   -jxvf    busybox-1.30.1.tar.bz2 

解压linux内核文件:

cp linux-4.4.178.tar.xz /usr/src/ 
cd /usr/src/
xz -d linux-4.4.178.tar.xz
tar xvf linux-4.4.178.tar

安装qemu

sudo apt-get install qemu
2. 编译最小文件系统

首先利用busybox手工编译一个最小文件系统

root@ubuntu:/work/busybox-1.30.1# export ARCH=arm
root@ubuntu:/work/busybox-1.30.1# export CROSS_COMPILE=arm-linux-gnueabi-
make menuconfig 
	 [*] Build static binary (no shared libs)   
make install 生成_install目录

配置根文件系统

将安装_install文件夹拷贝至内核源码目录
root@ubuntu:/work/busybox-1.30.1# cp _install/ /usr/src/linux-4.4.178  -r
创建根文件系统目录
root@ubuntu:/usr/src/linux-4.4.178/_install# mkdir etc dev mnt 
root@ubuntu:/usr/src/linux-4.4.178/_install# mkdir -p etc/init.d/
创建rcS文件
root@ubuntu:/usr/src/linux-4.4.178/_install# cd etc/init.d/
root@ubuntu:/usr/src/linux-4.4.178/_install/etc/init.d# touch rcS
root@ubuntu:/usr/src/linux-4.4.178/_install/etc/init.d# vim rcS 
在rcS文件中写入以下内容
mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
修改rcS文件执行权限
root@ubuntu:/usr/src/linux-4.4.178/_install/etc/init.d# chmod +x rcS 
创建fstab文件,并写入下面内容
root@ubuntu:/usr/src/linux-4.4.178/_install/etc/init.d# cd ../
root@ubuntu:/usr/src/linux-4.4.178/_install/etc# touch fstab
root@ubuntu:/usr/src/linux-4.4.178/_install/etc# vim 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
debugfs /sys/kernel/debug debugfs default 0 0

创建initab文件,并写入以下内容
root@ubuntu:/usr/src/linux-4.4.178/_install/etc# touch inittab
root@ubuntu:/usr/src/linux-4.4.178/_install/etc# vim inittab 
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
创建设备节点
root@ubuntu:/usr/src/linux-4.4.178/_install/etc# cd ../dev/
root@ubuntu:/usr/src/linux-4.4.178/_install/dev# mknod console c 5 1
root@ubuntu:/usr/src/linux-4.4.178/_install/dev# mknod null c 1 3

内核编译前参数配置

root@ubuntu:/usr/src/linux-4.4.178/_install/dev# cd ..
root@ubuntu:/usr/src/linux-4.4.178/_install# cd ..
root@ubuntu:/usr/src/linux-4.4.178# export ARCH=arm
root@ubuntu:/usr/src/linux-4.4.178# export CROSS_COMPILE=arm-linux-gnueabi-
root@ubuntu:/usr/src/linux-4.4.178# make vexpress_defconfig

设置文件系统目录
General setup  --->
	[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support                     		(_install) Initramfs source file(s)
设置内部分布,并设置开启高端内存
Kernel Features  --->  
    Memory split (3G/1G user/kernel split)  ---> 
    [*] High Memory Support 
开启gdb功能
Kernel hacking  --->   
	Compile-time checks and compiler options  --->   
		[*] Compile the kernel with debug info

编译内核,编译dtbs文件

make bzImage -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make dtbs ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

Qemu运行内核

qemu-system-arm -M vexpress-a9 -smp 4 -m 1024M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

运行展示:

Freeing unused kernel memory: 1456K

Please press Enter to activate this console. input: ImExPS/2 Generic Explorer Mouse as /devices/platform/smb/smb:motherboard/smb:motherboard:iofpga@7,00000000/10007000.kmi/serio1/input/input2

/ # ls
bin      etc      mnt      sbin     tmp
dev      linuxrc  proc     sys      usr
/ # cd /tmp/
/tmp # ls
/tmp # 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值