visionfive 串口调试与编译内核

串口调试

开发板除了通过 HDMI 连接显示器,然后通过 usb 键盘来控制之外,还可以通过串口与电脑进行连接,将它的输出信息显示在电脑上,并且还可以直接用电脑键盘来控制。
想要进行这样的操作,需要买一个 USB 转 TTL, 我使用的是 CH340G,拼多多上面 6.3 包邮买的,平时也可以用来给路由器或者机顶盒刷机。

ch340

另外我还有一个 CH341A,这个看起来就比较高级一点,两年前淘宝 18 块买的。

image-20220411135344552

不过只是用来调试开发板的话,它们用起来都一样的,连接到电脑的 usb 口之后,安装店家提供的驱动,顺利的话就可以在【设备管理器】的【端口】看到了。我们需要记住的是它对应的 com 口是多少,例如我图中的 12 和 13

image-20220411132651192

注:设备管理器可以通过点击,开始菜单旁边的放大镜,在里面搜索来打开。

image-20220411132635593

接下来需要它与开发板进行连接,这时就需要使用杜邦线,这个一般购买模块时都会赠送的,如果没有的话,也可以自己购买。拼多多或者淘宝搜【杜邦线母对母】就可以找到相对应的商品(个人建议购买比较长一点的,我之前用买模块送的杜邦线,只有十几厘米,有时候不太方面,所以后来我重新买了一排30厘米的)

连接的话只需要 3 根线,接序是这样的

GND --- GND
TX ---- RX
RX ---- TX

image-20220411135551131

按照这样连接好后,将模块插到电脑上,确认在设备管理器里可以看到。

然后我们还需要软件,才可以显示模块输出的信息。可以选择的软件非常多,我个人用过的有 putty、友善串口调试助手、以及我个人最常用的 xshell。我个人比较推荐 xshell,平时可以用来 ssh 连接开发板,需要串口调试时也可以用它。而且 xshell 个人在家庭或者学校使用的话,是完全免费的,到它的官网 https://www.xshell.com/zh/free-for-home-school/ 填写邮箱后,收到邮件就可以下载。

下载安装后,进行如下操作

image-20220411141221081

image-20220411141516299

顺利的话应该会看到这个

Connecting to COM12...
Connected.

此时就可以给开发板接通电源开机了。然后我们可以看到 bootloader 的加载信息,以及不断出现的系统启动信息。

bootloader version:211102-0b86f96
ddr 0x00000000, 1M test
ddr 0x00100000, 2M test
DDR clk 2133M,Version: 211102-d086aee
0 crc flash: 5595e732, crc ddr: 5595e732
crc check PASSED

bootloader.

OpenSBI v1.0
____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|

等到开机完成,会出现这样的界面,在这里我们可以用电脑键盘输入用户名和密码来进行登录。

image-20220411141936085

编译 Linux 内核

目前官方提供的 Fedora 镜像是

2021-December-26: Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw.zst

使用的内核是 5.15,如果我们想要使用更新的内核,可以选择自己编译。

首先下载源代码

git clone --depth=1 https://github.com/starfive-tech/linux.git

这时就得分情况了,我们是要在哪里进行编译呢?如果是在 x86 架构的机器编译,需要通过交叉编译。因为我们的开发板是 risc-v 架构的,如果直接在开发板编译就不需要。这两种我都又尝试过,分别讲一下。

交叉编译

按照 GitHub 上的文档操作即可。

https://github.com/starfive-tech/linux

先下载源代码,之后安装编译所需的工具

# Debian/Ubuntu
sudo apt-get install libncurses-dev libssl-dev bc flex bison make gcc gcc-riscv64-linux-gnu
# Fedora
sudo dnf install ncurses-devel openssl openssl-devel bc flex bison make gcc gcc-riscv64-linux-gnu
# Archlinux
sudo pacman -S --needed ncurses openssl bc flex bison make gcc riscv64-linux-gnu-gcc

配置与编译

make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- visionfive_defconfig
make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- nconfig
make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu-

我使用的处理器是 i5 8259U,四核八线程,第一次编译 3、4分钟就搞定了。

原生编译

同样下载源代码到设备上

安装编译所需的工具

sudo dnf install ncurses-devel openssl openssl-devel bc flex bison make gcc

配置与编译

make -j2 visionfive_defconfig
make -j2 nconfig
make -j2

由于板子是双核双线程的,所以这里就改为 -j2 了。耗费的时间是两个半小时左右。

不管是交叉编译还是原生编译,编译完成我们都可以得到内核 arch/riscv/boot/Image 以及 dtb arch/riscv/boot/dts/starfive/jh7100-starfive-visionfive-v1.dtb

那么要怎么使用它们呢?

我个人是这样操作的,在 /boot 里新建一个文件夹,然后将这两个文件放到里面。我现在新编译的内核版本是 5.18,所以我新建一个 518 的文件夹,再将内核与 dtb 复制进去。

mkdir /boot/518
cp arch/riscv/boot/Image /boot/518/
cp arch/riscv/boot/dts/starfive/jh7100-starfive-visionfive-v1.dtb /boot/518/

然后修改 /boot/grub.cfg ,在里面添加多一个 menuentry

menuentry '5.18' {
linux /518/Image earlycon console=ttyS0,115200n8 stmmac.chain_mode=1 root=/dd
ev/mmcblk0p4 rootwait
devicetree /518/jh7100-starfive-visionfive-v1.dtb
}

修改后这个文件前面 22 行的内容是这样的

set default=0
set timeout_style=menu
set timeout=2

set debug="linux,loader,mm"
set term="vt100"

menuentry '5.18' {
linux /518/Image earlycon console=ttyS0,115200n8 stmmac.chain_mode=1 root=/dev/mmcblk0p4 rootwait
devicetree /518/jh7100-starfive-visionfive-v1.dtb
}

menuentry 'Fedora vmlinux-5.17.0' {
linux /Image earlycon console=ttyS0,115200n8 stmmac.chain_mode=1 root=/dev/mmcblk0p4 rootwait
devicetree /jh7100-starfive-visionfive-v1.dtb
}

menuentry 'Fedora vmlinux-5.15.10+ visionfive' {
linux /vmlinuz-5.15.10+ ro root=UUID=59fcd098-2f22-441a-ba45-4f7185baf23f rhgb console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0 LANG=en_US.UTF-8
devicetree /dtbs/5.15.10+/starfive/jh7100-starfive-visionfive-v1.dtb
initrd /initramfs-5.15.10+.img
}

里面的 5.17 也是我之前自己添加的。此时重启机器

在启动过程中会出现一个选择菜单界面

image-20220411151418548

可以按上下键来选择不同的内核版本,如果不手动选的话,就会自动加载第一个。

进入系统后输入 uname -sr 可以查看当前的内核版本。

$uname -sr   
Linux 5.18.0-rc1-visionfive-g7ff84520cb68