Advertisement

我的嵌入式学习之路第一篇——开发环境搭建

阅读量:

前言

前一篇博客围绕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)

还没有任何评论哟~