
开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
基于【立创 泰山派开发】小手机实战项目-学习记录
前言:
本人为Linux初学者,一直局限于理论学习,苦于没有项目进行实战操作,感谢立创的技术分享,让我对知识的理解更近一步。因本人对驱动开发的掌握有限,遂本次项目复刻风漠兮大佬的开源,连接如下“泰山派3.1寸屏幕扩展板-集成供电、音频、串口、RTC - 嘉立创EDA开源硬件平台 (oshwhub.com)”同时还跟随教程,绘制了本工程的拓展版,因为本人觉得这个选择背光驱动的方法非常好!本文档仅作我在项目的学习过程中产生的问题的记录,并且附上学习解决问题时的方法,其他更详细内容请参考官方文档。
第一部分:SDK编译
为什么编译SDK?如果我们仅仅需要进行以西一些应用层的开发,那么我们完全可以不进行编译SDK,而是直接使用别人的固件包即可,但是如果我们自己编写了一些驱动,制作属于我们自己的驱动,那么则肯定离不开SDK的编译。以上即为我们什么时候需要编译,什么时候不需要编译。
在本次学习过程中,我选择编译Andiron11 SDK,并且选择了带有repo版本的(偷懒),从网盘下载后,首先进行校验,执行md5sum命令,如果与文件中的相同则正确,反之错误
第二步:解压缩文件
(不再对基础命令进行阐述)
tar -xzf xxx
进行同步代码,也就是我们选择repo的原因,简单方便快速,但要先确保我们的虚拟机中有repo和python ,对于repo(sudo apt install repo -y),对于python (sudo apt-get install python2.7)
(sudo apt-get install python3)
那么我的第一个问题就来了如何进行管理我们的python版本,如果一直使用命令切换,显得好繁琐并且记不住,每次都要打开文档查看,通过观看吴工的直播后发现MobaXterm一个从未发现的功能
一个命令录制,简直太好用了!录入sudo update-alternatives --config python命令后,就可以肆意切换python:
随后执行同步:.repo/repo/repo sync -l -j88
切换开发板分支:cd kernel/ && git clean -xdf && cd .. && repo forall -c "git checkout lckfb-tspi-v1.0.0"
安卓编译环境:sudo apt-get update && sudo apt-get install -y git python make openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libgl1-mesa-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libxml2-utils xsltproc unzip python bc imagemagick ccache schedtool libssl-dev libncursesw5-dbg libncursesw5-dev libncurses5 libncursesw5 libncursesada5-dev libncurses5-dbg libncurses5-dev libncursesada-doc libncursesada5 libncurses-dev libncurses-gst libncurses5-dev clang
全编译Android11:cd u-boot && ./make.sh rk3566 && cd ../kernel && make clean && make distclean && make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j16 && cd .. && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j16 && make -j16 && ./mkimage.sh
一定记住除了VCCIO4和6选1.8V其他都选3V3!!
笔者一直到这里全部非常顺利,一直在编译到98%时候突然出现error(哭泣),最初以为自己哪里没选对,遂进行一个非常愚蠢的决定,删库重来哈哈哈,按照流程重新来一次后再次在98%时出现error,此时笔者已经清醒,选择了人工智能,不得不说人工智能的提问可以解决非常多的问题,经查是编译内存不够了。遂对虚拟机进行扩容,选择24G内存后,终于全部编译成功。
第三部分:设备树
什么是设备树,根据笔者学习的多种教程总结如下:描述设备树的文件叫做DTS,此文件采用树形结构描述板子设备的文件,简单来说就是设备信息,比如IIC上挂在了什么设备,CPU的数量等等。树的主干是系统总线,比如各种操控器如IIC控制器等。如果我们设计不同板子,这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用的文件,其他的.dts 文件直接引用这个通用文件即可,这个通用文件就是.dtsi 文件,类似于 C 语言中的头文件。一般.dts 描述板级信息(也就是有哪些 IIC 设备、SPI 设备等),.dtsi 描述 SOC 级信息(也就是 SOC 各个外设控制器信息等)。其他信息因各个平台的教程都有非常详细的教程就不在此处赘述。
第四部分:点亮屏幕
于此处部分,便进入笔者全新的学习内容,也是最喜欢的实操部分。笔者购买了群中推荐的屏幕,猫猫屏和大显3.1的两块MIPI屏幕。于此章节介绍一下笔者学习点亮屏幕过程中的心得体会。
刷新率计算公式:
对于HDMI屏幕只需要关闭user文件中的定义即可
无论是何种屏幕,我们都需要知道屏幕参数才可以点亮例如:水平像素参数、垂直像素参数等,这些参数就在屏幕的数据手册中,找到后对照填入参数配置即可
对于本次实验主要选择MIPI屏幕,选择MIPI屏幕时候一定要注意引脚顺序、背光供电电流等,还有lanes , 幕分辨率越高lanes数量就越多,屏幕的数据手册中LED cureent即为描述的典型电流,泰山派的电流是110mA,不要超过!
中间的配置教程写的非常详细,不再赘述。
初始化序列
第一个接触的新知识,屏幕序列,通过理解和对照常见SPI屏幕,可以简单理解为设置寄存器。
序列格式:[包类型][发送延时][数据长度][MIPI屏初始化数据*n个]
例如:39 00 06 FF 77 01 00 00 11::39命令的操作码表示这是一个长写命令;00 通常表示发送延时,这里设置为 0,表示没有额外的延时;06 表示后面跟随的参数个数,这里是 6 个字节


触摸驱动:
学习于此变进入了本次项目的最终阶段和核心部分,驱动程序的编写,也是笔者小白当初学习时候超级吃力的地方,感觉驱动开发好难,各种设备的驱动框架一个又一个,不知从何处下手,基本在一个月的时间里,一直停留在原地,看不懂程序,甚至对照教程编写程序也非常吃力,一度想要放弃,经过放空一段时间后,停下进度,重新阅读原厂代码,在去看驱动,便有了不一样的体验,对于字符型驱动,无非便是实现open、write等函数,然后注册入口出口等,所以希望学习驱动开发的小白们坚持就是胜利!
本次实验实现i2c的触摸屏幕:
对于各种转接板,不在此赘述。
驱动开发有两种方式配置到内核、模块,对应在Makefile中y、m 如obj-y += gt9xx/obj-m += gt9xx/,其他更详s细内容请参考各类教程,对照其他框架编写程序:
设计图

BOM


评论