我的嵌入式学习之路第一篇——开发环境搭建
发布时间
阅读量:
阅读量
前言
前一篇博客围绕arm架构展开,构建了qemu与arm相结合的开发环境,但在实际操作过程中遇到了诸多问题,其中最基础的困难在于我对arm架构的指令集掌握不够深入,这不仅影响了我使用gdb进行程序调试,也对进一步理解linux系统带来了阻碍。因此,决定首先从较为简单的部分入手,在x86架构上进行实践,待对相关概念有更清晰的认识后,再尝试转向其他架构的学习。
承接前篇
在详细说明之前,先简要回顾一下当前已完成的环境配置情况:
基于ubuntu 16.04的操作系统平台(已安装vm tools及相关配套工具)
linux-4.14.7内核源码(由于开发过程中出现了一些问题,该源码被删除,后续直接通过apt方式安装了linux4.4.0版本的源码)
qemu工具链
busy box工具集
剩余环境搭建
以下内容主要来源于博客:https://www.cnblogs.com/pengdonglin137/p/6442598.html,但由于在实际搭建过程中遇到了诸多问题与挑战,因此专门撰写一篇文章以详细记录整个构建过程。
制作ramdisk镜像
本环境采用ramdisk作为系统启动媒介,因此需预先生成对应的ramdisk镜像文件
cd
sudo mkdir my_kernel
cd my_kernel
sudo mkdir rootfs
sudo cp ../busybox-1.24.2/_install/* rootfs/ -raf
bash
请注意上述第5行内容,其作用是将已编译完成的busy_box目录中的文件复制至rootfs目录中,因此需要将路径调整为自身编译生成的busy box对应路径
sudo mkdir -p rootfs/proc/
sudo mkdir -p rootfs/sys/
sudo mkdir -p rootfs/tmp/
sudo mkdir -p rootfs/root/
sudo mkdir -p rootfs/var/
sudo mkdir -p rootfs/mnt/
sudo cp etc rootfs/ -arf
bash
最后一行etc中的相关内容可通过此处进行下载:
sudo mkdir -p rootfs/lib
sudo cp -arf /lib/i386-linux-gnu/* rootfs/lib/
bash
若所采用的虚拟机为64位架构,则在/lib/目录中将不存在与i386相关的运行库文件,因此需自行进行下载操作,以下提供一种可行的解决方案:
sudo dpkg --print-architecture
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install iceweasel:i386
bash
这样便可以在/lilb目录中定位到i386-linux-gnu目录。
sudo rm rootfs/lib/*.a
sudo strip rootfs/lib/*
sudo mkdir -p rootfs/dev/
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
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3
sudo dd if=/dev/zero of=ramdisk bs=1M count=32
sudo mkfs.ext4 -F ramdisk
sudo mkdir -p tmpfs
sudo mount -t ext4 ramdisk ./tmpfs/ -o loop
sudo cp -raf rootfs/* tmpfs/
sudo umount tmpfs
sudo gzip --best -c ramdisk > ramdisk.gz
启动脚本
编写一个启动脚本,其中需要调整的部分我已经添加了相应的注释说明
#!/bin/bash
sudo qemu-system-i386 \
-smp 2 \
-m 1024M \
# 请指定正确镜像路径
-kernel /home/elzat/linux_code/linux-source-4.4.0/out_x86/arch/x86/boot/bzImage \
-nographic \
-append "root=/dev/ram0 rw rootfstype=ext4 console=ttyS0 init=/linuxrc" \
# 请指定正确ramdisk路径
-initrd /home/elzat/my_kernel/ramdisk.gz
全部评论 (0)
还没有任何评论哟~
