嵌入式linux学习笔记fbtft使用笔记(代码片段)

张竞豪 张竞豪     2022-12-05     311

关键词:

前言

在断断续续学习了比较长时间的嵌入式Linux之后,我着手准备自己设计一款Linux的小电脑,在设计硬件之前,我需要掌握一些软硬件的使用,比如fbtft用于驱动小LCD屏幕,usb摄像头,2.4Gwifi模块等
我对Linux还不算太熟悉,所以记录下这段时间的学习过程,加以巩固
刚开始所有的实验都基于比较成熟的硬件平台,正点原子Linux开发板,之前也是用这款开发板进行学习的,后面再迁移到自己做的板子上

参考资料

软硬件平台

  • ubuntu采用正点原子的虚拟机镜像,uboot,kernel和rootfs均采用正点原子教程镜像,内核版本4.1.15,采用网络方式挂载
  • 开发板采用正点原子linux开发板,屏幕用的中景园2.4寸 240*320 驱动ILI9341

配置过程

根据fbtft驱动配置设备树

fbtft的驱动在drivers->staging->fbtft中,找到我这款屏幕的驱动代码,发现设备树节点名称需要是 “ilitek,ili9341”


然后需要自己选定要用哪几个引脚,完成pinctrl的配置
这款屏幕是SPI接口的,除了SCL和SDA引脚外还需要配置RES,DC,CS和BLK引脚
查看原理图,我设置DC用GPIO_1,RES用GPIO_2,CS还用ECSPI3_SS0,BLK背光控制用和正点原子LCD相同的PWM引脚 BLT_PWM
这时候我们还不知道这些引脚到底对应芯片的哪几个脚,于是需要继续查看原理图和内核源码

在核心板的原理图上发现了这些引脚的具体名称,接下来查看imx6ul的gpio驱动部分

最后在 imx6ul-pinfunc.h 里发现了这些引脚的宏定义,以GPIO1为例,可以看到GPIO1_IO01有很多复用功能,我们需要将他配置为GPIO最基本的功能

其他引脚也类似,将设备树中以前的pinctrl节点注释掉,添加新的节点,0x10b0是GPIO输出的一般配置,0x10b1一般用于配置复用引脚

然后配置ecspi3设备树节点,pinctrl选择上面配置好的节点,按照我的理解pinctrl只是把对应的引脚初始化了,具体哪个引脚是什么功能,比如CLK或者RST等还需要在ecspi节点中选择用哪个引脚,比如RST用了GPIO1_IO02,于是设备树中就有reset-gpios = 这一句。ili9341节点的属性是参照官方wiki中的来配置的

这是背光引脚的配置


一切修改完后,记得在设备树中搜索是否有重复节点,有没有把同一个引脚配置成不同的功能

修改内核选项

运行make menuconfig 来配置内核选项 或者./mx6ull_alientek_emmc.sh来配置并且编译内核
其中./mx6ull_alientek_emmc.sh中有四行


make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_no_lcd_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

第一行清理工程,第二行用事先保存好的配置来更新并覆盖掉内核根目录下的.config文件
第三行打开一个图形界面,看看还有没有什么要配置的,第四行编译所有,包括内核镜像和设备树

如果只改动了设备树,则只需要编译设备树 make dtbs ,把生成的dtbs拷贝到板子上就行了

关闭板子自带的LCD驱动,把光标指的地方关闭就可以了

在staging drivers里选中small TFT display的支持

选择对应的驱动芯片

最后可以将配置重新保存一下,省得下次配置又被覆盖了,每次运行./mx6ull_alientek_emmc.sh之前的.config就会被清理


这样内核就配置完成了

修改uboot参数

在uboot中更改启动选项为网络启动,方便之后修改,增加console=tty1,这样开机后屏幕上就会出现log信息
其中10.100是ubuntu ip,10.150是板子ip

抄下官方教程,下面这么设置后就可以板子插键盘操作LCD终端了

setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs  nfsroot=192.168.10.100:/home/alientek/linux/nfs/rootfs,proto=tcp rw ip=192.168.10.150:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off'
saveenv

测试

屏幕接上板子,开机后出现log,这是最开始拍的,还没有设置rotate参数
可以找到/dev/fb0

运行命令

cat /dev/urandom > /dev/fb0

屏幕有花屏就是对的

用mplayer播放视频测试下
命令行参考
https://blog.csdn.net/xiaolong1126626497/article/details/124313017
mplayer -cache 8192 -zoom -x 320 -y 240 -framedrop gong.mp4
大功告成

嵌入式linux学习笔记fbtft使用笔记(代码片段)

前言在断断续续学习了比较长时间的嵌入式Linux之后,我着手准备自己设计一款Linux的小电脑,在设计硬件之前,我需要掌握一些软硬件的使用,比如fbtft用于驱动小LCD屏幕,usb摄像头,2.4Gwifi模块等我对Linu... 查看详情

嵌入式linux学习笔记(代码片段)

常用操作&相关知识压缩解压解压.tar.bz2tar-vxjflinux-imx-4.1.15-2.1.0-g8a006db.tar.bz2压缩.tar.bz2tar-vcjfalientek_uboot.tar.bz2alientek_uboot编译将前面编译出来的led.o文件链接到0X87800000这个地址,使用如下命令:arm-linux-gnueab 查看详情

yocto学习笔记(代码片段)

...含两个组件:ebuild和emerge),目的为构建定制化的嵌入式Linux发行版提供一系列模板、工具和方法。BitBake使用和Portage构建脚本相同的 查看详情

linux学习笔记——常用命令(代码片段)

...系统的强大,也慢慢不局限于做一些小作品。目标是嵌入式Linux 查看详情

嵌入式linux的调试技术读书笔记

...的技术无疑更奇脚手亮发强款而稳定的Linux内核模块对于嵌入式Linux俞核模块、可fA,衍程庄、央事库的调试可能要更复杂一些。因为在失多赞时候需要至少两 查看详情

设备树学习笔记(代码片段)

学习正点原子《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》个人笔记设备树编译  设备树源文件扩展名为.dts,DTS是设备树源码文件,DTB是将DTS编译以后得到的二进制文件。将.dts编译为.dtb需要用到DTC工具,... 查看详情

第十章读书笔记

...技术无疑更有助于开发强大而稳定的Linux内核模块。对于嵌入式Linux内核模块、可执行程序、共享库的调试可能要更复杂一些。 P 查看详情

linux学习笔记(代码片段)

Linux学习笔记(一)Author:akynazhBlog:akynazh.siteLinux开机CMOS是记录各项硬件参数且嵌入在主板上面的储存器BIOS则是一个写入到主板上的一个固件(固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,计算... 查看详情

嵌入式linux/android疑难杂症工作笔记(代码片段)

嵌入式Linux/Android疑难杂症工作笔记Android系统Cortex-A57内核压力测试连续震荡性内存泄漏导致OOMKiller硬件平台公司自研ARMCortex-A574核SOC产品板软件环境系统:Android-PLinux内核版本:4.9运行公司内部的kernel_submit内核压力测试脚本,通... 查看详情

omapl138调试笔记(代码片段)

title:Linux嵌入式使用tags:新建,模板,小书匠grammar_cjkRuby:trueCopyright(C)@2018WidicFilename:File-function:Cre_ID:@Widic2018-1-23Mod_ID:三学习过程20170617uart2作为调试串口bandrate115200串口调试终端采用ZOC3.开发板启动开官如下:SD卡挂载boot分区挂载... 查看详情

gnuld脚本学习笔记

...器,ld实际并不是GCC的一部分,ld属于binutils软件包。但是嵌入式开发时,下载的linaroGCC工具集中是包含arm-linux-gnueabihf-ld的。工作中我经常使用ARM的scatter文件,和这个LD脚本差不多,只不过scatter文件的功能要弱不少,这也是为什... 查看详情

linux学习笔记(代码片段)

linux学习笔记1.操作系统的发展史1.2Unix1.2Minix1.3Minix1.4Minix没有火起来的原因2.linux介绍2.1Linux内核版本2.2Linux发行版本2.3Linux目录结构2.4用户目录3.命令行的基本用法3.1命令的使用方式3.2查看帮助文档3.3tab自动补全3.4history游览历史3.5... 查看详情

linux学习笔记(代码片段)

Linux学习笔记(二)Author:akynazhBlog:akynazh.site一些文件操作pwdpwd[-P]-P:显示出确实的路径,而非使用链接(link)路径。mkdirmkdir[-mp]目录名称-m:设置文件的权限喔!直接设置,不需要看默认权限(umask... 查看详情

markdown[ubuntu系统常见故障]#学习笔记#嵌入式系统#ubuntu(代码片段)

查看详情

markdown[ubuntu系统常用指令]#学习笔记#嵌入式系统#ubuntu(代码片段)

查看详情

linux学习笔记(代码片段)

文章目录前言一.Shell基础1.查看2.安装3.使用4.Bash基本特性Bash解释器具有许多方便的快捷键查看历史命令命令别名标准输入输出的重定向管道二.helloworld三.变量1.自定义变量定义变量取消变量变量规范2.环境变量3.位置变量4.预定义... 查看详情

linux学习笔记一(代码片段)

linux学习笔记一文章目录linux学习笔记一Linuxpackageoperationoflookingfilesoperationhelpcommandsowncommandsechotunnelechoagainuserorrootprocessingaliasagainfinding这个是我在学习linux系统的时候的一点的小小的总结,希望对大家有一定的在帮助啦。Linux 查看详情

linux系列笔记---------g++/gcc应该这样学!(代码片段)

作者:嵌入式历练者ID:Eterlove记下相关笔记,记录我的学习生活!站在巨人的肩上StandingonShouldersofGiants!该文章为原创,转载请注明出处和作者:https://blog.csdn.net/Eterlove/article/details/120929816linux下的Gcc故事1.g+ 查看详情