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

news2024/9/22 10:50:30

文章目录

    • 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 tag

git 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 shared

Persisted:
GUID                                  DEVICE

PS 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-microsoft

  You 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.coloradmin.cn/o/2139309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用OpenFeign在不同微服务之间传递用户信息时失败

文章目录 起因原因解决方法: 起因 从pay-service中实现下单时,会调用到user-service中的扣减余额。 因此这里需要在不同微服务之间传递用户信息。 但是user-service中始终从始至终拿不到user的信息。 原因 在pay-service中,不仅要Enable O…

YOLO学习笔记 | YOLO目标检测算法(YOLO-V2)

github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 YOLO-V2 V1与V2区别Batch Normalization更大分辨率YOLO-V2网络结构 V1与V2区别 V2更强更快 Batch Normalization 更大分辨率 YOLO-V2网络结构

顺序栈讲解

文章目录 🍊自我介绍🍊顺序栈讲解生活中的例子栈的基本概念入栈和出栈 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是小…

《ImageNet Classification with Deep Convolutional Neural Networks》论文导读

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl《ImageNet Classification with Deep Convolutional Neural Networks》是一篇在深度学习领域具有重要影响力的论文,由Alex Krizhevsky、Ilya Sutskever和Geoffrey E. Hinton等人撰写。该论文主要…

窗口嵌入桌面背景层(vb.net,高考倒计时特供版)

开发思路 根据系统生成高考倒计时的具体时间,附加江苏省省统考的时间生成算法,并且用户可以根据实际情况调整前后30天,具有丰富多彩的图片库和强大的自定义功能,效果图见P3 目前程序处于正式版的1.4版本,本程序由本作…

【信创】Linux上图形化多ping工具--gping的编译安装与打包 _ 统信 _ 麒麟 _ 方德

原文链接:【信创】图形化多ping工具gping的编译安装与打包 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于在Linux操作系统上使用gping的文章。gping是一款非常实用的命令行工具,它将传统的ping命令进行了可视化改进…

CCPC赛后补题-线性基

模板题:https://www.luogu.com.cn/problem/P3812 线性基可以用一个长度为$ \log_2N $的数组描述值域[1,N],0的情况需要特判。 一个长度为64的线性基可以描述所有的64位整数。 在2024年CCPC网络赛中,考到了线性基。没学过,追悔莫…

解决iframe嵌套第三方页面被拒绝

背景 很多时候,出于安全考虑,没有第三方页面的允许,我们是无法直接通过iframe去打开别人的第三方页面的,通常他们会通过在页面请求的响应头增加X-Frame-Options (去了解)和Content-Security-Policy (去了解)。 目的 可是有些时…

详细介绍 Servlet 基本概念——以餐厅服务员为喻

什么是Servlet Servlet 是 Java EE(Java Platform, Enterprise Edition)中用于构建动态 web 应用的组件。它在服务器端运行,并能够处理客户端请求,生成动态响应。以下是对 Servlet 的详细介绍: 1. Servlet 的基本概念…

COSMOSPANDA星际熊猫助阵长江商学院高尔夫周年庆典

在金秋送爽的美好时节,星际漫游(广州)品牌管理有限公司旗下备受欢迎的潮玩IP“COSMOSPANDA星际熊猫”与长江商学院深圳校友会强强联手,于9月10日在风景如画的中山雅居乐长江高尔夫球会成功举办了“长江商学院深圳校友会高尔夫球队…

基于ssm+vue+uniapp的智能停车场管理系统小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

6.1 溪降技术:绳结

目录 6.1 绳结电子书:绳结1级概览正确打结打绳结绳结组成部分学习术语八字套结(双八字结)观看技术步骤双重单结(反手结绳耳)观看技术步骤骡子结(驮马结)观看技术步骤 6.1 绳结 电子书&#xff1…

【人工智能】AI创业的前沿思考 | 从垂直领域到通用智能模型AGI的崛起

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

影视剧数据分析与可视化

数据入口:影视剧数据集 - Heywhale.com 读取的数据包含750条条目,分布在6个列中。以下是数据的列和它们的数据类型: 影视剧名称(object):表示影视剧的名称。影视剧标签(object)&…

<<编码>> 第 12 章 二进制加法器--全加器 示例电路

全加器的内部构成 info::操作说明 鼠标单击逻辑输入切换 0|1 状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch12-05-full-adder-internal.txt 全加器 info::操作说明 鼠标…

机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用

大家好,我是微学AI,今天给大家介绍一下机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用。首先阐述了 XGBoost 算法的数学原理及公式,为模型构建提供理论基础。接着利用 kaggle 平台的糖尿病数据集,通过详细的…

【C++】queue和priority_queue

个人主页~ queue和priority_queue 一、queue的介绍和使用1、queue的介绍2、queue的使用3、queue的模拟实现 二、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用3、priority_queue的模拟实现 三、仿函数1、仿函数的特征2、仿函数的使用 ex、有关于l…

完结马哥教育SRE课程--基础篇

文章目录 一、Linux基础入门1.Linux基本架构2.什么是shell3.命令执行过程4.Shell中的两类命令5.常见命令6.输出信息echo7.tab键补全8.获取帮助 二、文件管理和IO重定向1.文件系统目录结构2.文件系统目录功能3.linux下的文件类型4.文件操作命令5.文件状态stat6.确定文件内容7.文…

【webpack4系列】webpack基础用法(二)

文章目录 entryoutputloaderpluginmode前端构建基础配置关联HTML插件html-webpack-plugin构建 CSS 解析 ES6和React JSX解析 ES6解析 React JSX 解析CSS、Less和Sass解析CSS解析Less解析sass 解析图片和字体资源解析:解析图片资源解析:解析字体资源解析&…

系统 IO

"裸奔"层次:不带操作系统的编程 APP(应用程序) -------------------------------- Hardware(硬件) 特点:简单,应用程序直接操作硬件(寄存器) 缺点: 1. 搞应用开发的必须要了解硬件的实现细节,能够看懂原理图…