Cubieboard2(三) 系统构建 —— WSL Ubuntu 中挂载 U 盘(SDCard)

ops/2024/9/23 1:08:39/

文章目录

    • 1 WSL Ubuntu 中挂载 U 盘(SDCard)
    • 2 usbipd 搭建虚拟机与宿主机 USB 通信桥梁
    • 3 WSL 内核添加 USB 设备驱动
      • 3.1 编译 WSL Linux 内核
      • 3.2 挂载 USB(SDCard) 设备
    • 附录:WSL 操作命令
    • 附录:git 仓库检出

1 WSL Ubuntu 中挂载 U 盘(SDCard)

Linux 驱动开发需要给 SDCard 烧写 u-boot,kernal,rootfs 等内容。如果我们要使用 wsl(这里的 wsl 指的是 WSL 2.x 版本,下同) 进行 Linux 驱动开发,那么我们首先要将 SDCard 挂载到 wsl 中。

  • 参考:

    • https://zhuanlan.zhihu.com/p/661175117
    • https://zhuanlan.zhihu.com/p/607493975
  • sdcard 无法挂载到 wsl 有 2 个原因:

    • wsl 是虚拟机,无法直接访问宿主机的 USB 设备。这个问题通过一个叫 usbipd 的桥接工具解决
    • wsl 内核没有加入 USB 存储设备的驱动。这个问题通过重新编译 wsl 内核镜像解决

2 usbipd 搭建虚拟机与宿主机 USB 通信桥梁

usbipd 在 OSI 的网络层(IP)、传输层(TCP)之间建立 USB 设备与虚拟机的通信,即 IP 网络共享 USB 设备。

  • 1)安装 usbipd 工具
# 可以通过以下命令下载安装(我这里可能因为网络原因失败了)
winget install --interactive --exact dorssel.usbipd-win# 也可以直接去其 github 分发地址下载,下载完成后双击安装即可。
https://github.com/dorssel/usbipd-win/releases
  • 2)回到 wsl ubuntu 中安装 usbipd 工具:
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
  • 3)根据要求重启宿主机。

3 WSL 内核添加 USB 设备驱动

与 Linux 驱动开发的流程一样:配置驱动,编译内核。

3.1 编译 WSL Linux 内核

  • 1)编译工具库准备
sudo apt install libncurses-dev libgmp-dev  \build-essential flex bison libssl-dev libelf-dev dwarves
  • 2)源码准备:
# 克隆源码
git clone https://github.com/microsoft/WSL2-Linux-Kernel.git# 选择合适的分支检出(原来这里我选择 6.6.y 版本,却没有六六大顺 ^_^)
git branch -a 
git taggit checkout linux-msft-wsl-5.15.y
  • 3)内核配置文件编辑:

    make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl
    
    • (1)进入 Device Drivers -> USB Support

    • (2)找到 Support for Host-side USB,键入 “y”

    • (3)找到 USB/IP Support -> VCHI hcd.

    • (4)找到 USB Mass Storage support,将其子条目全部选中

  • 4)编译 wsl linux 内核:(如果中途有询问选项,直接回车即可)

make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl# 结果查询:
find -name bzImage -exec ls -lh {} \;lrwxrwxrwx 1 root root 22 Sep 11 16:24  ./arch/x86_64/boot/bzImage -> ../../x86/boot/bzImage
-rw-r--r-- 1 root root 16M Sep 11 16:24 ./arch/x86/boot/bzImage

3.2 挂载 USB(SDCard) 设备

  • 1)打开用户目录(如 C:\Users\[username],可在资源管理器中输入 %UserProfile% 打开该目录),将 bzImage 拷贝进去

  • 2)新建名为 .wslconfig 的配置文件,并输入以下内容:

    [wsl2]
    kernel=C:\\Users\\[Username]\\bzImage
    # 替换上述 [Username]
    
  • 3)重启 wsl ubuntu

# 在 PowerShell 中输入以下命令
# 终止运行
wsl -t Ubuntu-22.04-cb2 
# 以 root 用户启动
wsl -d Ubuntu-22.04-cb2 -u root# 在 ubuntu 中输入
$ uname -r
5.15.153.1-microsoft-standard-WSL2+
  • 4)连接:
PS C:\Users\Chris> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-19   067b:2731  USB 大容量存储设备                                            Not sharedPersisted:
GUID                                  DEVICEPS C:\Users\Chris> usbipd bind -b 1-19
PS C:\Users\Chris> usbipd attach -a --wsl --busid 1-19
usbipd: info: Using WSL distribution 'Ubuntu-22.04-cb2' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.22.48.1 to reach the host.
usbipd: info: Starting endless attach loop; press Ctrl+C to quit.
WSL Attached
  • 5)连接结果:
$ lsusb
Bus 002 Device 002: ID 067b:2731 Prolific Technology, Inc. USB SD Card Reader
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub$ lsblk
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 388.6M  1 disk
sdb    8:16   0     2G  0 disk [SWAP]
sdc    8:32   0     1T  0 disk /snap/mnt/wslg/distro/
sdd    8:48   1  29.1G  0 disk
  • 6)问题日志:
# 情况 1:
usbipd attach -a --wsl --busid 1-19
usbipd: error: Device is not shared; run 'usbipd bind --busid 1-19' as administrator first.
这种情况需要先使用 usbipd bind -b 1-19 命令将 STATE 的状态变成 Shared# 情况 2:
usbipd attach -a --wsl --busid 1-19
usbipd: info: Using WSL distribution 'Ubuntu-22.04-cb2' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Loading vhci_hcd module.
usbipd: error: Loading vhci_hcd failed.
这种情况可以先去 wsl ubuntu 中输入 modprobe vhci_hcd 指令查看 vhci_hcd 模块是否安装,
如果没有安装,需要在 make menuconfig 时设置 Device Drivers -> USB Support -> USB/IP Support -> VHCI hcd# 情况3:
usbipd list
WARNING: usbipd not found for kernel 6.6.36.6-microsoftYou may need to install the following packages for this specific kernel:linux-tools-6.6.36.6-microsoft-standard-WSL2+linux-cloud-tools-6.6.36.6-microsoft-standard-WSL2+You may also want to install one of the following packages to keep up to date:linux-tools-standard-WSL2+linux-cloud-tools-standard-WSL2+
这个命令应该在 wsl 中执行,而不是 wsl ubuntu 的命令行

附录:WSL 操作命令

  • 参考:https://blog.csdn.net/weixin_38103659/article/details/125135074
wsl -l [--running]  # 列出当前 WSL [运行中] Linux 子系统 
wsl -t [wsl_name]   # 终止名为 wsl_name 的 Linux 子系统# 打开新 WSL 实例
wsl -d UbuntuRuby               # 仅打开指定版本
wsl -d UbuntuRuby -u username   # 以指定用户启动# 备份与恢复
wsl --export Ubuntu-22.04                 D:\Workspace\WSL_Bak\Ubuntu-22.04-20240908.tar
wsl --import Ubuntu-22.04 D:\Software\WSL D:\Workspace\WSL_Bak\Ubuntu-22.04-20240908.tar

附录:git 仓库检出

# 1)我们想要操作的是远程【分支】,以 wsl linux 仓库为例:
$ git branch -a
remotes/origin/HEAD -> origin/linux-msft-wsl-6.6.y
remotes/origin/linux-msft-wsl-4.19.y
remotes/origin/linux-msft-wsl-5.10.y
remotes/origin/linux-msft-wsl-5.15.y
remotes/origin/linux-msft-wsl-5.4.y
remotes/origin/linux-msft-wsl-6.1.y
remotes/origin/linux-msft-wsl-6.6.y
remotes/origin/master
## (1)先创建本地分支,再检出
git branch linux-msft-wsl-5.15.y remotes/origin/linux-msft-wsl-5.15.y
git checkout linux-msft-wsl-5.15.y
## (2)直接检出远程分支,并创建一个与之关联的本地分支
git checkout -b linux-msft-wsl-6.6.y remotes/origin/linux-msft-wsl-6.6.y
# (3)在本地新建一个同名分支,系统会自动关联其同名远程分支
git checkout linux-msft-wsl-6.6.y# 2)我们想要操作的是【标签】,以 linux 仓库为例
$ git tag | grep v6.0
v6.0
v6.0-rc1
v6.0-rc2
v6.0-rc3
v6.0-rc4
v6.0-rc5
v6.0-rc6
v6.0-rc7
# (1)先创建分支,再切换
git branch v6.0-rc7 v6.0-rc7 
git checkout v6.0-rc7 
# (2)直接创建
git checkout -b v6.0-rc7 v6.0-rc7 

http://www.ppmy.cn/ops/114506.html

相关文章

Spring Boot母婴商城:育儿专家的推荐

3 系统分析 当用户确定开发一款程序时,是需要遵循下面的顺序进行工作,概括为:系统分析–>系统设计–>系统开发–>系统测试,无论这个过程是否有变更或者迭代,都是按照这样的顺序开展工作的。系统分析就是分析系…

设备稳定流畅视频体验,乐鑫ESP32-S3芯片方案无线音视频传输通信

在快节奏的现代生活中,家庭安全和便利性成为了人们日益关注的话题。随着物联网技术的发展,智能家居安全系统正逐渐成为守护家庭的新选择。 家居安全如门锁和警报器,这些产品通过先进的传感器、摄像头和智能分析技术,不仅能够实时…

MTK芯片机型的“工程固件” 红米note9 5G版资源预览 写入以及改写参数相关步骤解析

小米机型:小米5 小米5x 米6 米6x 米8 米9 米10系列 米11系列 米12系列 mix mix2 mix2s mix3 max max2 max3 note3 8se 9se cc9系列 米play 平板系列等分享 红米机型:红米note4 红米note4x 红米note5 红米note6 红米note7 红米note8 红米note8pro 红米s2 红米note7pro 红米…

supermap iclient3d for cesium中entity使用

目标将西南石油大学部分区域围起来,然后引个标签显示名称,最后弄个飞机绕学校飞(这个时间有点晚了,明天弄) 围墙: wall:{positions:Cesium.Cartesian3.fromDegreesArrayHeights([104.173,30.822,500,104.178,30.837,500,104.19,3…

Rust表达一下中秋祝福,群发问候!

一、Rust表达一下中秋祝福 在Rust中,表达中秋佳节的祝福可以通过定义一个包含祝福语的字符串变量,并使用标准输出函数来打印这个字符串。以下是一个简单的Rust程序示例,用于展示如何用Rust编写并打印中秋佳节的祝福语: fn main()…

学习大数据DAY59 全量抽取和增量抽取实战

目录 需求流程: 需求分析与规范 作业 作业2 需求流程: 全量抽取 增量抽取 - DataX Kettle Sqoop ... 场景: 业务部门同事或者甲方的工作人员给我们的部门经理和你提出了新的需 求 流程: 联系 > 开会讨论 > 确认需求 > 落地 需求文档( 具体…

外包干了4年,技术退步太明显了。。。。。

先说一下自己的情况,本科生生,20年通过校招进入武汉某软件公司,干了差不多4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能…

Git常用指令整理【新手入门级】【by慕羽】

Git 是一个分布式版本控制系统,主要用于跟踪和管理源代码的更改。它允许多名开发者协作,同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理,个人理解的Git相关的一些指令和用法 文章目录 一、git安装 & 创建git仓…