测试平台
宿主机平台:Ubuntu 16.04.6
目标机:iMX6ULL
目标机内核:Linux 4.1.15
目标机添加串口设备
一般嵌入式主板的默认镜像可能只配置了调试串口,并用于 console 控制台打印;
接下来对怎么样通过设备树来添加用户串口进行描述;
前提:
目标机以及正常烧录 uboot、内核、文件系统、dtb等;本文仅更新设备树dtb文件;
设备树文件修改
在内核源码中找到相关板子对应的dtb文件;
位置: arch/arm/boot/dts 目录下
本文使用的板子相关文件有:
imx6ull.dtsi // 官方通用板层dtsi
mys-imx6ull-14x14-evk.dts // 基于imx6ull-14x14-evk.dts模板修改
mys-imx6ull-14x14-evk-gpmi-weim.dts // 用户层dts
添加 uart3和uart4 的支持,修改 mys-imx6ull-14x14-evk.dts 文件如下
pinctrl_uart2: uart2grp {
fsl,pins=
>;
};
pinctrl_uart2dte: uart2dtegrp {
fsl,pins=
>;
};/*增加uart3/4/5的引脚配置*/pinctrl_uart3: uart3grp {
fsl,pins=
>;
};
pinctrl_uart4: uart4grp {
fsl,pins=
>;
};
pinctrl_uart5: uart5grp {
fsl,pins=
>;
};
...../*使能串口*/
&uart1 {
pinctrl-names = "default";
pinctrl- = ;
status= "okay";
};&uart2 {
pinctrl-names = "default";
pinctrl- = ;/*fsl,uart-has-rtscts;*/
/*for DTE mode, add below change*/
/*fsl,dte-mode;*/
/*pinctrl-0 = ;*/status= "disabled";
};/*增加使用串口,其中使能3、关闭4/5*/
&uart3 {
pinctrl-names = "default";
pinctrl- = ;
status= "okay";
};&uart4 {
pinctrl-names = "default";
pinctrl- = ;
status= "okay";
};/*这里必须注意一点,由于UART5和I2C2接口的引脚是复用的,I2C2默认是使能的所以必须禁用I2C2,再使能UART5.*/
&uart5 {
pinctrl-names = "default";
pinctrl- = ;
status= "disabled";
};
然后重新编译生成 设备树 dtb 文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-distcleancp arch/arm/configs/mys_imx6_defconfig .configmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
生成的 dtb 文件:arch/arm/boot/dts/mys-imx6ull-14x14-evk-gpmi-weim.dtb
设备树文件更新
mys-imx6ull-14x14-evk-gpmi-weim.dtb 替换 /Profiles/Wh Linux Update/OS Firmware/files/ 下面的 dtb文件
然后执行 mfgtool2-linux-mys-6ulx-nand-dtb.vbs
Set wshShell = CreateObject("WScript.shell")
wshShell.run"mfgtool2.exe -c""Wh Linux Update""-l""NAND-dtb""-s""lite=l""-s""6uluboot=14x14evk""-s""nand=nand""-s""6uldtb=14x14-evk""-s""nanddtb=gpmi-weim""-s""part_uboot=0""-s""part_kernel=1""-s""part_dtb=2""-s""part_rootfs=3""-s""ddrsize=256""-s""rootfs_name=core-image-base"""Set wshShell= Nothing
更新成功,设备重启之后,看到添加的串口设备已支持