@嵌入式Linux系统显示屏移植方法总结(debian9.5系统+移植了Linux3.8.13内核)
硬件:beagleboneBlack+element14 7寸显示屏
1.编译Linux内核
1.1 编译准备
Linux内核源代码(linux-3.8.13-bone69-bb-view-7.zip,版本3.8.13)
Debian9.5系统可在官网下载
镜像下载地址:镜像下载地址
内核源码下载地址:内核源码下载地址
1.2 编译准备
使用默认配置,配置Linux内核:
执行命令:cd ~/element_rtlinux/bbb-debian-3.8.13-lcd 进入内核所在目录
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bb.org_defconfig
配置内核开启LCD和Touchscreen相关驱动
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xconfig
关闭CPU frequency scaling, ‘CPU Power Management —> CPU Frequency scaling’(适配xenomai)
打开Pulse-Width Modulation (PWM) Support —>ECAP PWM support 和EHPRWM PWM support(适配LCD背光系统backlight PWM输出)
打开Graphics support—>Backlight&LCD device support 和Generic PWM based Backlight Driver
Ctrl+F搜索 LCDC 打开下图选项配置基于Ti LCDC控制器的通用panel
安装lzop
执行命令:sudo apt-get install lzop
编译内核:
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage –j 4
编译完成后
1.3 移植前准备
查看安装结果:
查看arch/arm/boot/目录下的zImage
2 设备树的配置和编译
进入设备树文件夹
执行命令:cd arch/arm/boot/dts/
如下图所示主要设备树文件:am335x-boneblack.dts am335x-bone-common.dtsi am33xx.dtsi
我们主要在设备树am335x-bone-common.dtsi中修改。
配置设备树文件加载lcd相关驱动
Lcd设备树的配置可以分为三个部分:1.Lcd背光系统的配置 2.显示屏(panel)的配置 3.触摸功能的配置
2.1 背光系统的配置
打开am335x-bone-common.dtsi、am33xx.dtsi文件
执行命令:gedit am335x-bone-common.dtsi am33xx.dtsi
在am33xx.dtsi文件中对epwmss1和ehrpwm1的status进行修改设置为okay,原来为disabled。epwmss1和ehrpwm1这两个节点是关于pwm输出的。
在am335x-bone-common.dtsi文件中,做如下的添加:
在am33x_pinmux:pinmux@44e1088节点下面添加背光引脚和引脚功能(ehrpwm1_pins:pinmux_backlight_pins)如下所示。查看BB-view的datasheet可以得到相关的引脚,如下图。之后查看BBB_Header_Table确定引脚的OFFSET和功能。
在am335x-bone-common.dtsi文件下,ocp节点下面添加,如下图所示。开启pwm功能。
在am335x-bone-common.dtsi文件下添加backlight节点,配置背光驱动,开启lcd的背光系统。其中的compatible属性“pwm-backlight”与backlight背光系统驱动对应,调用对应的驱动程序。背光子系统位于/driver/video/backlight目录下,balight.c文件。
该节点添加位置也在ocp节点下面:/ocp/backlight
2.2 显示屏panel配置
依然是在am335x-bone-common.dtsi、am33xx.dtsi下进行配置
在am335x-bone-common.dtsi文件下面,在am33x_pinmux:pinmux@44e1088下添加lcd_pins节点如下,该节点是关于lcd引脚引脚的配置。主要参考BBB_Header_Table,和BB-view的datasheet。
在am335x-bone-common.dtsi文件下面,添加panel节点如下。
panel节点也添加在ocp节点下面;
2.3 其余配置
依然是在am335x-bone-common.dtsi、am33xx.dtsi下进行配置
首先在am33xx.dtsi文件下面找到tscadc节点,对其进行修改如下。
在am335x-bone-common.dtsi文件下面添加如下:
添加tscadc节点,他是对am33xx.dtsi文件下tscadc节点的调用,并对其进行补充。写法主要参考了内核文档documentation/devicetree/bindings中关于触摸屏相关的设备树文件。该节点添加位置也在ocp节点下面。
在am335x-bone-common.dtsi文件下面添加fb节点,添加位置也在ocp节点下面。
2.4 设备树的编译
进入内核源码目录
执行如下命令:cd ~/element_rtlinux/bbb-debian-3.8.13-lcd/
编译设备树文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x-boneblack.dtb
编译成功过显示:
在arch/arm/boot/dts/目录下面会生成am335x-boneblack.dtb文件
3 内核与设备树的移植
3.1 安装内核模块到指定文件
将安装的lib内核模块压缩拷贝到BeagleBone系统,并解压至根目录下;
PC端:
cd lib
tar czvf lib.tar.gz ./*
BBB端:
tar xzvf lib.tar.gz –C /lib
3.2 移植内核
将arch/arm/boot/目录下的zImage拷贝到系统的内核分区(/boot)下。
对zImage文件进行重命名为vmlinuz-4.14.71-ti-r80以匹配uEnv.tst文件。
3.3 移植设备树文件
将之前编译好的在arch/arm/boot/dts/目录下的am335x-boneblack.dtb文件拷贝到bbb中的boot目录下的dtbs文件夹下面。
4 遇到的一些文件
上电启动过程中,分析内核启动信息碰到的问题
问题1:confict P8.45(#5:BB-BONELT-HDMI)
猜测:这是P8.45引脚与BB-BONELT-HDMI的配置冲突了
解决方法:
打开设备树文件 am335x-bone-common.dtsi ,将引起冲突的这部分备注掉就行。
问题2:pin 44e108a0 already request by hdmi.15;cannot caim for panel.9
解决方法:也是因为引脚的原因导致panel节点加载不了。
打开设备树文件 am335x-bone-common.dtsi ,将引起冲突的这部分备注掉就行。
背光系统加载成功会显示
成功启动界面会出现linux企鹅,并进入Linux系统。