无ARM开发板的情况下搭建ARM开发环境。记录备忘
0. 环境
1.准备工具
a. 安装工具链
sudo apt install gcc-arm-linux-gnueabi qemu
补充调试工具
sudo apt install gdb-arm-none-eabi
b. 下载linux
内核
c. 下载文件系统busybox-1.25.0
2. 制作文件系统
解压进入busybox目录
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make menuconfig, 配置成表态编译,Busybox Setting--> Build Options -->
下图
然后,make;make install会在busybox的根目录下生成_install目录
将此_install文件复制到linux-4.0目录下
cp -a _install linux-4.0
在linux-4.0/_install目录下新建目录
mkdir -pv etc/init.d dev
在新建的etc/init.d/目录下新建文件rcS, 内容如下:
rcS需要可执行权限。否则后面启动系统会报错
在新建的etc/目录下新建文件fstab, 内容如下:
新建文件inittab, 内容如下:
在新建的目录dev下新建文件
sudo mknod console c 5 1
sudo mknod null c 1 3
3. 编译内核
进入linux-4.0目录
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make menuconfig
a. 配置ram disk
General setup [*] initial RAM filesystem and RAM disk(initramfs/initrd)support
(_install)initramfs source file(s)
在initramfs source file中填_install(也就是使用刚才编译busybox后copy过来的东东)
b. 配置memory split 为"3G/1G user/kernel split"以及打开高端内存
Kernel Features --> Memory split(3G/1G user/kernel split) --> [*] High Memory support
c. 编译内核
make bzImage -j4;make dtbs
4. 运行
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
进入控制台
5.调试内核
a. 需要内核有调试信息
Kernel hacking --> Compile-time checks and compiler options --> compile the kernel with debug info
b. 取消编译优化
将顶层目录下的Makefile文件中的几个"-O2"改成"-O".
c. 启动
1. 终端运行如下命令
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 -S -s
2. 另一个终端运行如下命令
arm-none-eabi-gdb --tui vmlinux
(gdb) target remote localhost:1234
(gdb) b start_kernel
(gdb) c