IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> WSL打造Linux开发环境教程 -> 正文阅读

[系统运维]WSL打造Linux开发环境教程

开发环境

win10 64位
WSL Ubuntu 1804.2020824.0
MobaXterm 工具

注意:这里需要使用WSL 2,因为WSL 1 不支持挂载sd卡镜像驱动,会一直报挂载失败故障。

查看 当前WSL版本,win+r cmd后输入:

wsl -l -v

  NAME            STATE           VERSION
* Ubuntu-18.04    Running         1

如果这里VERSION 为1 需要将WSL 升级到VERSION 2

关于win10开启WSL功能和如何升级WSL

本教程使用到的资源文件为:

资源版本
qemuqemu-6.0.0.tar.xz
ubootu-boot-2017.01.tar.bz2
kernellinux-5.9.2.tar.gz
busyboxbusybox-1.28.1.tar.bz2

将上述文件拷贝到

\\wsl$\Ubuntu-18.04\home\用户

路径下
在这里插入图片描述

首先安装可能需要安装的库,如果后续有提示缺少库可根据需要安装:

需要安装的库:

sudo apt-get install build-essential pkg-config zlib1g-dev libglib2.0-0 libglib2.0-dev  libsdl1.2-dev libpixman-1-dev libfdt-dev autoconf automake libtool librbd-dev libaio-dev flex bison -y

交叉编译链安装:

sudo apt install gcc-arm-linux-gnueabihf

输入

arm-linux-gnueabihf-gcc -v

查看是否安装成功

在这里插入图片描述

安装QEMU

解压并编译安装

tar xvf qemu-6.0.0.tar.xz
cd qemu-6.0.0
./configure --prefix=/usr/local/qemu --target-list=arm-softmmu --audio-drv-list=
make -j8 && sudo make install
sudo ln -s /usr/local/qemu/bin/* /usr/local/bin/

其中 --target-list:选择目标机器的架构。默认是将所有的架构都编译,但为了更快的完成编译,指定需要的架构即可。

出现问题:

  1. ERROR: Cannot find Ninja
    在这里插入图片描述

解决方法:

	sudo apt-get install ninja-build

执行完毕测试:

qemu-img -V

在这里插入图片描述
查看 QEMU 支持的板子

qemu-system-arm -M help

其中

vexpress-a9          ARM Versatile Express for Cortex-A9

为本教程选择的虚拟开发板

编译uboot源码并仿真

解压源码

	tar xvf u-boot-2017.01.tar.bz2
	cd u-boot-2017.01/

指定编译环境

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

查看uboot支持的板级配置

ls configs/vexpress_*

在这里插入图片描述
这里选择vexpress_ca9x4_defconfig

make vexpress_ca9x4_defconfig

此时会在源码目录下生成配置.config文件
在这里插入图片描述

uboot编译源码

make -j16

编译完成后在源码目录生成uboot镜像文件

在这里插入图片描述

uboot仿真

qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic

其中-nographic 不使用图形化界面
在这里插入图片描述

退出qemu

网上很多教程都说是输入ctrl + A 后按 X退出 QEMU,在wsl上实测不能退出,wsl上退出方法为:重新打开一个wsl窗口输入

 sudo killall qemu-system-arm

在这里插入图片描述

编译Linux内核并仿真

编译Linux内核

解压Linux源码

tar xvf linux-5.9.2.tar.gz
cd linux-5.9.2

指定编译环境

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

查看内核配置文件

ls arch/arm/configs/

在这里插入图片描述
这里我们选择vexpress_defconfig配置文件

make vexpress_defconfig

查看配置中的控制台设备号

cat arch/arm/configs/vexpress_defconfig |grep -n "CONFIG_CMDLINE"

vexpress_defconfig 中设置了 CONFIG_CMDLINE=“console=ttyAMA0”

在这里插入图片描述

配置内核

make menuconfig

出现问题:

  1. Unable to find the ncurses package.

解决问题:

sudo apt-get install ncurses-dev

选择内核支持nfs功能:

File systems – > Network File systems

在这里插入图片描述

编译内核源码

make -j8

内核仿真

sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

其中 -dtb 指定设备树,否则会失败
-append “console=ttyAMA0” 内核启动參数。这里告诉内核vexpress串口设备是哪一个。

在这里插入图片描述

编译busybox源码制作根文件系统及仿真

编译busybox源码

解压busybox源码

tar xvf busybox-1.28.1.tar.bz2
cd busybox-1.28.1/

指定编译环境

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

配置busybox

make menuconfig

选中 Settings-> [*] Build static binary (no shared libs)

在这里插入图片描述

编译busybox源码

make -j16

安装busybox

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install 

通过 make install 命令把生成的根文件创建在顶层目录(busybox-1.28.1根目录) _install 下

注意这里一定要加上 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 否则安装为x86架构的镜像无法进入控制行操作。

编写制作rootfs和sd卡镜像文件

在busybox-1.28.1根目录下,新建make_rootfs.sh文件

vim make_rootfs.sh

加入一下内容

#    File Name:  make_rootfs.sh
##
#!/bin/sh
base=`pwd`
tmpfs=/_tmpfs

# 如果存在删除
sudo rm -rf rootfs
sudo rm -rf ${tmpfs}
sudo rm -f a9rootfs.ext4

sudo mkdir rootfs
# 拷贝 _install 中文件 到 rootfs
sudo cp _install/*  rootfs/ -raf

#sudo mkdir -p rootfs/{lib,proc,sys,tmp,root,var,mnt}
cd rootfs && sudo mkdir -p lib proc sys tmp root var mnt && cd ${base}

# 根据自己的实际情况, 找到并 拷贝 arm-gcc 中的 libc中的所有.so 库
sudo cp -arf /usr/arm-linux-gnueabihf/lib/*  rootfs/lib

sudo cp examples/bootfloppy/etc rootfs/ -arf
sudo sed -r  "/askfirst/ s/.*/::respawn:-\/bin\/sh/" rootfs/etc/inittab -i
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=a9rootfs.ext4 bs=1M count=32
# 如果提示 "No space left on device" 证明 dd 命令中 count 的大小不够,可以先进行瘦身

sudo mkfs.ext4 a9rootfs.ext4
sudo mkdir -p ${tmpfs}
sudo chmod 777 ${tmpfs}
sudo mount -t ext4 a9rootfs.ext4 ${tmpfs}/ -o loop
sudo cp -r rootfs/*  ${tmpfs}/
sudo umount ${tmpfs}

然后给文件执行权限,然后执行脚本

sudo chmod a+x make_rootfs.sh
./make_rootfs.sh

在这里插入图片描述
接着进入rootfs/lib 中,为交叉编译工具链瘦身

cd rootfs/lib/
sudo arm-linux-gnueabihf-strip ./*
du -h ./

在这里插入图片描述

仿真rootfs

拷贝 a9rootfs.ext4 文件 到 之前 内核 linux-5.9.2 根目录中 ,并在 其中打开终端输入下面命令进行仿真

cp a9rootfs.ext4 ../linux-5.9.2

在linux-5.9.2主目录执行

qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd ./a9rootfs.ext4

在这里插入图片描述
根文件系统仿真完毕

问题总结

终于填坑完毕,踩坑过程中出现了很多问题,一度怀疑WSL不能搭建开发环境,后期仿真根文件系统的时候,总是挂载ext4文件失败,是因为WSL版本1不支持挂载ext4格式的磁盘,升级到WSL版本2测试通过了,在编译过程中出现各种报错问题,一般都是没有相应的库,按照报错内容下载对应库就好了,WSL真是开发者的利器,再也不用各种套娃装虚拟机加系统,各种卡了。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:58:38  更:2021-08-15 15:59:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:31:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码