RDK S100 打开 uart2 功能 —— BSP 编译步骤
在 Ubuntu 主机上操作(建议 22.04,需有 sudo 权限)。完成本步骤后会生成含已打开 uart2 设备树的内核 deb 包,再安装到 S100 板子上即可使用 uart2。
关键前提:uart2 的 RXD/TXD 引脚与 i2c5 的 SCL/SDA 引脚复用,而 i2c5 默认是打开的(status = "okay")。因此要使用 uart2,必须同时禁用 i2c5,否则引脚冲突,uart2 无法正常工作。
一、准备编译环境
1. 安装宿主依赖包
sudo apt-get install -y build-essential make cmake libpcre3 libpcre3-dev bc bison \
flex python3-numpy mtd-utils zlib1g-dev libgmp-dev libdata-hexdumper-perl \
libncurses5-dev zip qemu-user-static ccache curl repo git liblz4-tool \
apt-cacher-ng libssl-dev checkpolicy autoconf libtool \
android-sdk-libsparse-utils mtools parted dosfstools udev rsync multistrap whois
libgmp-dev(fastecdsa 编译需要)、libtool(ethercat 编译需要)必须装,否则后续会报错。
2. 安装 Python 依赖
pip3 install -r requirements.txt
3. 安装交叉编译工具链(GCC 11.3)
curl -fO http://archive.d-robotics.cc/toolchain/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
sudo tar -xJf arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt
配置环境变量(追加到 ~/.bashrc,再执行 source ~/.bashrc 生效):
export CROSS_COMPILE=/opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
export PATH=$PATH:/opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin
export ARCH=arm64
二、修改设备树,打开 uart2 并禁用 i2c5
编辑文件:
source/hobot-drivers/kernel-dts/drobot-s100-soc.dtsi
1. 打开 uart2
找到 uart2: uart@394C0000 节点,把 status 改为 okay:
uart2: uart@394C0000 {
power-domains = <&scmi_smc_pd PD_IDX_LSPERI_TOP>;
compatible = "snps,dw-apb-uart";
reg = <0x0 0x394C0000 0x0 0x10000>;
reg-shift = <2>;
reg-io-width = <4>;
interrupts = <GIC_SPI PERISYS_UART2_INTR PERISYS_UART2_INTR_TRIG_TYPE>;
clock-frequency = <200000000>;
pinctrl-names = "default";
pinctrl-0 = <&peri_uart2>;
status = "okay"; // 由 disabled 改为 okay
};
2. 禁用 i2c5
找到 i2c5: i2c@39470000 节点,把 status 改为 disabled:
i2c5: i2c@39470000 {
...
pinctrl-0 = <&peri_i2c5>;
pinctrl-1 = <&peri_i2c5_gpio>;
scl-gpios = <&peri_port0 15 GPIO_ACTIVE_HIGH>;
sda-gpios = <&peri_port0 16 GPIO_ACTIVE_HIGH>;
status = "disabled"; // 由 okay 改为 disabled(释放复用引脚给 uart2)
...
};
i2c5 下挂着音频 ADC es7210_0,禁用父节点 i2c5 后该设备不会被枚举。若仍需 i2c5 上的设备,则不能使用 uart2,二者只能择一。
三、编译内核,生成 deb 包
./mk_kernel.sh
编译耗时约 10~30 分钟(首次全量)。完成后 deb 包位于 out/product/deb_packages/,主要关注:
| 文件 |
说明 |
linux-image-rdk-s100_*.deb |
含已打开 uart2 的设备树(所有 S100 板级 DTB) |
linux-headers-*.deb |
内核头文件 |
hobot-ethercat_*.deb |
EtherCAT 内核模块(可选) |
文件名中的 -dirty 后缀表示设备树源码有未提交改动,属正常现象。
四、部署到 S100 板子
将 linux-image-rdk-s100_*.deb 拷贝到板子,安装后重启:
sudo dpkg -i linux-image-rdk-s100_*.deb
sudo reboot
安装该 deb 会同时更新内核镜像与设备树(DTB 会安装到 /boot/hobot/,板子启动时自动选用对应板级文件)。
五、验证 uart2 已生效
重启后,在板子上执行:
# 1. 查看串口设备是否生成
ls -l /dev/ttyS*
# 2. 查看内核日志中的 uart/serial 注册信息
dmesg | grep -i "394c0000\|serial\|uart"