bbb debian 内核手动替换以及相关USB gadget服务关闭
随着大赛截止日期的临近,我的内心逐渐变得紧张,今天发贴记录下这段时间作品的开发进度。
首先是硬件部分,为了我的作品设计了两个扩展板,一个是BBB的扩展版3D图如下:
上面主要由 ESP32 和一个 JTAG 电平匹配电路组成,分别用来实现 wifi 连接的 JTAG 调试功能。这块板子昨天已经发出去打样了。
其次是第二个板子,raspberrypi zero w 的扩展版,主要包括一个 JTAG 接口电路,3D 图如下,计划今天发出去打样。
我主要是想在这些开源硬件上实现一个高性能的类似 JLINK PRO 的调试器,因为我平时工作在32这里处理器上开发 rtos 相关功能更多一点,但是呢平时用 stlink 这类调试器,有时候还会使用到 openocd,感觉平时也够用,直到有一天发现了一个 black magic 的开发项目,感觉这个调试器很有意思,但是它是在32上实现的,所以呢我想尝试在更高性能处理器上实现这部分功能,所以就有了我这次参加比赛的项目。
硬件扩展版部分介绍完了,下面就介绍下软件部分的进度,因为项目还是基于linux开发的,这里主要涉及到内核的应用态的开发,内核态主要是USB gadget。更具体一点是g_serial
这部分相关功能的开发。这段时间一直没有更新,有一个原因是就是我没有找到很好替换bbb内核的方法,因为我的项目需要在内核下做修改,所以鸽了这么久。
今天下午再次尝试发现了硬解的方法,简单来说就是手动编译内核(找一个和原版内核接近的版本,实际是分支,仓库的路径是 https://github.com/beagleboard/linux.git
),强制替换相关的文件: vmlinuz(实际是zImage), dtbs(设备树文件),ko(驱动文件)。然后通过修改 /boot/uEnv.txt
文件来切换使用的内核,及其相关文件(设备树,和驱动)。替换完之后,上电按下S2案件选择BBB从SDCARD启动,接着就能顺利启动内核。
看下我替换完之后的效果:
debian@BeagleBone:~$ uname -a
Linux BeagleBone 5.10.168+
debian@BeagleBone:~$ cat /proc/version
Linux version 5.10.168+ (red@fedora) (arm-none-linux-gnueabihf-gcc (Arm GNU Toolchain 11.3.Rel1) 11.3.1 20220712, GNU ld (Arm GNU Toolchain 11.3.Rel1) 2.38.20220708)
之前测试官方的内核好像是将 usb gadget 也作为 console 了,我这里因为要用到这个console作为普通的串口,并且我发现了一个异常的服务:
[FAILED] Failed to start BeagleBoard.org USB gadgets.
我选择了直接关闭这个服务:
systemctl disable bb-usb-gadgets.service
同时还有一个服务导致 ttyGS0 作为 console, 关闭这个服务
systemctl disable serial-getty@.service
然后重新配置内核,上电就自动识别为 gadget serial,且不再作为console,测试的截图如下。
对了在 clone 内核 https://github.com/beagleboard/linux.git 的时候,学会了一招在 clone 大仓库时,可以选择浅 clone (只拉取部分提交记录而非全部)的方法,简单来说就是如下几个命令:
git clone --depth 1 <url>
git fetch --unshallow
git fetch --depth 1 origin 远程分支名称
git checkout 远程分支名称