http://www.openloongson.org/forum.php?mod=viewthread&tid=141&extra=

为了让大家更好的学习这个屏的驱动,这两天对屏幕以及GUI驱动做了一些优化

继续更新20161230 (扩展板)代码在这

隐藏下,给论坛增加下人气

游客,如果您要查看本帖隐藏内容请回复

更新内容:

1、采用platform驱动框架,优化驱动调用结构和层次

2、优化代码,将编译过程中所有的警告信息全部排除

3、优化MCU屏的驱动代码,减少不必要函数中转调用,尤其是关乎写屏的函数代码,尽可能的提高屏的写入效率

4、去除大部分没必要的调试代码,让代码看起来更好看些

5、删除没用的测试函数

注意:测试过程参考下面的过程,相关文件路径设置没变

继续更新20160714代码在这:http://pan.baidu.com/s/1skRuFhj

更新内容(续历史内容):

1、刚有了1C的官方扩展板,将代码更新为扩展板适用版本(目前官方扩展板的管脚对MCU屏效率不是最优的,扩展板的管脚不同于我历史杜邦线管脚,扩展板管脚对MCU屏的效率比较低,因为它拆开了屏数据接口,写屏幕时需要拆分整合数据,降低了屏的写入效率)

2、更新了一个tty驱动(tty_lcd),可以脱离串口单独运行了(调试好后可以关闭串口设备),用户程序依附在tty_lcd的shell壳下,串口依然有console输出(没有问题,可以换,但是没必要)

3、在tty_lcd驱动之下实现了当前tty_lcd shell壳下的终端,也就是说,在这个终端模拟下,可以脱离串口调试运行,触摸键盘效率低下,最好不要使用vi、more、top等指令,触摸模拟键盘并没有实现相关中断切换(如ctrl+c)指令,改进键盘可以实现,假如用了就退出重新进入模拟终端吧

4、修改查看文本最好使用已经实现的电子图书和记事本应用(^_^)

调试步骤:

直接make 、insmod调试需要做下准备(按步骤来哦,说的罗嗦点,懂的自然懂):

1、在/home下新建lcd9341目录并将down下的SYSTEM整个复制到lcd9341下,即必须有相关图标文件/home/lcd9341/SYSTEM 的文件

2、将make得到的lcd9341_dri.ko内核文件下载至/home/lcd9341下

3、将用户程序编译(mipsel-linux-gcc -o lcdtest lcdtest.c)得到的lcdtest用户程序下载到/home/lcd9341下

4、增加/etc/rc.d/rc.sysinit内容 底行增加  ifconfig eth0 192.168.11.70(你的局域网ip)

5、增加/etc/rc.d/rc.sysinit内容 继续增加 /usr/sbin/telnetd (说明:4、5两部是为了防止调试失败的时候,可以打开telnet补救)

6、增加/etc/rc.d/rc.sysinit内容 继续增加 /sbin/insmod /home/lcd9341/lcd9341_dri.ko(说明:加载本例的驱动)

7、增加/etc/rc.d/rc.sysinit内容 继续增加 /home/lcd9341/lcdtest &(说明:当前壳下运行用户程序)

8、重要,增加/etc/initab内容,添加行   tty_lcd0::respawn:-/bin/sh (说明:内核启动后会自动打开这条指令的/dev/tty_lcd0设备,建立内核和本例子tty驱动的联系)

9、reboot吧

图片若干

20160702内容:
 
20160702杜邦线代码(非扩展板历史内容):http://pan.baidu.com/s/1qYN81o4
代码内容包括(基本也是我基于这个屏幕的移植学习适配过程):
1、GPIO控制(这是基础)2、驱动框架
3、ili9341屏驱动
4、5线制XPT2046芯片电阻屏驱动
5、中文字库
6、图片解码(BMP、GIF、JPG)
7、GUI基于上述硬件实现的控件
8、(着重说下)linux下目录文件的控制(这里花了很多时间,学习了VFS,dentry,以及具体的文件系统,最后还是放弃,通过用户态方法交互实现)
9、内核线程编程(虽然不完美),尽量释放内核
10、内核态、用户态交互配合(各种二者之间的通信配合,最后选择了个简单的办法)
11、最后深入了解驱动框架编程
代码中管脚文档说明较为清楚,lcdtest.c是用户态程序,
其余为驱动代码,make完insmod 然后需要修改一些图标路径,字库路径,触摸屏校准流程

直接make运行的需要做如下准备工作:
1、在/etc下新建FONT目录并将代码中down下的font下的字库文件复制到/etc/FONT下
2、在/home下新建lcd9341目录并将down下的SYSTEM整个复制到lcd9341下 即必须有相关图标文件/home/lcd9341/SYSTEM 的文件
3、校准你的触屏,会在/etc下生成触屏配置文件tft_9341_touch.cfg

记录:
移植了触摸驱动
移植了中文字库
移植了GUI(实现了窗口、按钮、滚动跳,编辑框等控件,文件浏览控件实现中 存在bug)
移植了一个记事本功能文件浏览功能移植完成
JPG GIF BMP移植完成  
去掉独占内核方式,改为线程模式,释放内核(本来就该这样,不然就失去了GUI的意义)
移植了一个记事本
增加GUI界面的触屏校准
1C反应不错,不算慢

历史内容:更新一处管脚说明:屏RST需要接在板子RESET脚 
驱动源码20151025更新 http://pan.baidu.com/s/1dD16GiX 
管脚说明:http://pan.baidu.com/s/1jI6iy6y
伪驱动源码 http://pan.baidu.com/s/1dDkB0o5 
环境我用的人家搭好的 http://pan.baidu.com/s/1dDB5ZWH 
里面有个“安装并配置好的虚拟机开发环境”vmware虚拟机,直接下载下来,环境都搞好了
我这个屏的型号是正点原子9341的屏,其他类似屏同样可以驱动

伪驱动源码里面有个yizhihanshu.c的文件,这里的代码都是以频繁读写/sys/class/gipo/里面的文件来驱动显示屏,效率极其低下,可想而知,当你向屏的数据接口写16位数据的时候,你要读写16次文件(还有N次的命令使能端口读写),而你要刷新一个屏幕时,拿65535色的屏来说,你需要读写16X65535次文件,显而易见需要极其长的时间,事实也是当刷新一次屏基本上需要半个小时

之前研究了 龙芯1B开发板-点灯大法  http://www.openloongson.org/foru ... d=20&extra=page%3D1
在这个基础上移植了这个驱动

于是尝试自己动手写个驱动,从内核的层面驱动(上面都是废话)
驱动这个屏,有四个命令端口CS RS WR RD,用的GPIO46至49,D0~D15对应GPIO64~79,之所以用这个,是为了读取写入数据的效率,因为这样直接对应 GPIO_OUT2的低16位,可以一次性操作到位

lcd9341_device.c文件主要是一些直接和内核打交道的框架函数,关于 file_operations这里我研究了1天,主要是一些接口的配置,程式化的,不必深究,.open = lcd_open,初始化驱动文件,unlocked_ioctl=lcd_ioctl操作命令,.write = lcd_write,应用程序向驱动传递数据,其他内容源码注释较为清楚了

lcd9341_fn.c文件是驱动的具体实现,以及移植了一些函数原型,之所以说是移植,需要gpio_out_mod(void)输出模式 gpio_in_mod(void)输入模式, read_data读数据 write_data写数据等一些必要的函数的支持,主要是为了配合ILI93xx.c(这个文件来自正点原子STM32驱动)

我在makefile这里浪费了很多时间,虽然makefile文件内容很少。
不得不说,linux包容的东西太多,很多地方不是很了解,但是一旦了解,就刻骨铭心,呵呵
源码有很多注释
再次感谢论坛详实(l乱七八糟)的资料

20151025新增部分:
将驱动编译进内核,免得每次都要insmod

首先将lcd9341文件夹复制进源码drivers/下

1、修改drivers/目录内Kconfig文件
底行增加:
source "drivers/lcd9341/Kconfig"
 
2、修改drivers/目录内Makefile文件
底行增加:
obj-$(CONFIG_LCD9341_LS1C_DRIVER_SUPPORT) += lcd9341/
 
3、lcd9341文件夹内已经有了对应的makefile和kconfig文件了(关于Kconfig 和makefile的资料可以参考:http://blog.csdn.net/luobin1984/article/details/7990798)
4、虚拟环境下make menuconfig 找到
 
5、进去选中,一直exit,退出保存 make
6、重启1C板子,按空格,pmon行输入:
devcp tftp://192.168.xxx.xxx/vmlinux /dev/mtd0
load结束后重启
7、板子进入系统后命令行查看模块情况:
ls /dev/
 
说明驱动已经有了,对了 linux对于驱动都是当作一个文件(字符设备?)来管理的
8、运行测试程序(我称之为自己弄的虚拟终端*^_^* ),目前利用popen管道来测试输出,测试程序源码lcdtest.c文件地址:http://pan.baidu.com/s/1mgvmMPq
虚拟机编译下:
mipsel-linux-gcc -o lcdtest ledtest.c
将编译得到的lcdtest弄进1C板子,运行后将获得一个虚拟的终端程序,以后你所有的执行输出将在屏幕显示(cd等命令有问题,这是由于popen函数造成的),lcdtest程序为一个死循环程序,别忘记ctrl+c退出哦

大神请无视,权且当作学习笔记,我将乐此不疲O(∩_∩)O~~~~

3.jpg (1.91 MB, 下载次数: 2)

增加中文字库

2.png (236.87 KB, 下载次数: 1)

附:龙芯Intellij IDEA开发Spring web应用视频 

http://tieba.baidu.com/p/5975179608

龙芯9341屏驱动开发过程(GUI、增加tty 裸奔版)相关推荐

  1. 【龙芯1B例程】:串口中断实验

    龙芯(只供学习,不可商用) 文章目录 前言 一.串口中断是什么? 二.开发步骤 1.龙芯1B串口驱动函数(内置) 2.串口中断示例代码 3.代码示例图 总结 前言 文章参考官方各类书籍,以及网络知识, ...

  2. 龙芯发布.NET 6.0.100开发者内测版

    龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者内测版的新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构.目前支持LoongArch64架构和MIPS ...

  3. 龙芯.NET正式发布 开源共享与开发者共成长

    2020年12月19日,2020中国. NET开发者大会于苏州盛大开幕.本次大会以"开源.共享.创新"为主题,以线下城市苏州为中心,覆盖北京.上海.深圳.广州.长沙.成都.厦门.胶 ...

  4. 【转贴】龙芯生态产品和解决方案巡展(第二篇)——笔记本电脑

    龙芯生态产品和解决方案巡展(第二篇)--笔记本电脑 2019-05-24 11:17 http://www.sohu.com/a/316441945_309387 龙芯携手众多合作伙伴厂商共同开发多套 ...

  5. 龙芯智龙开发板:驱动步进电机实战入门

    本文面向初学者,请多各位高手包涵.我在此特别致谢勤为本先生为我提供的帮助. 步进电机 步进电机就是一种受脉冲控制的电机,步进电机接收到一系列某种调制顺序的脉冲,做出相应的反应,转到相应的角度或者相应的 ...

  6. 基于龙芯 2K1000 的嵌入式 Linux 系统移植和驱动程序设计(二)

    第 3 章 嵌入式软件系统移植 本课题中嵌入式系统正常工作的前提是嵌入式软件系统完整且能正常工作, 以便为之后的软件开发提供一个能够正常工作的平台.引导程序 PMON 需要完成 内核引导,嵌入式 Li ...

  7. firefox驱动_零适配 + 全兼容!龙芯电脑推出办公外设利旧通用解决方案:运行原生 Windows 驱动程序...

    龙芯中科宣布推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的 Windows 驱动程序,具有 "零适配.全兼 ...

  8. 龙芯1B核心板,内核编译方法:实现usb转串口,即pl2303驱动的模块化安装使用

    龙芯1B核心板,内核编译方法,以usb转串口的方法为例 usb转串口的驱动,惯例使用的是pl2303驱动,在龙芯1B中也不例外,龙芯1B中使用的内核版本号是linux3.18,其中本身就带有pl230 ...

  9. 基于龙芯2K1000平台CL1606AD760-8驱动调试总结

    历经两周终于将设计的AD采集板驱动起来,并且读取电流值成功,唯不是一个突破!由硬件设计再到驱动,一步步设计改变:到设备树添加驱动并加载,总结主要分为两方面,一个驱动调试和硬件调试.细节如下: 驱动调试 ...

最新文章

  1. Eclipse中SVN设置文件为ignore后重新添加至版本控制
  2. OTS parsing error: invalid version tag woff和ttf文件被Filter拦截
  3. Java学习_day007:数组与方法
  4. rocketmq 消费者不能调用其他服务_Spring Cloud Alibaba RocketMQ - 构建异步通信的微服务...
  5. 【图论】Tree之最小方差树(bzoj 3754)
  6. 非阻IO与EWOULDBLOCK EAGAIN
  7. JavaScript中的数学对象Math
  8. Linux系统的服务器配置minicom接console线调试交换机的步骤
  9. 运用循环判断语句和列表的购物车程序
  10. Atitit.每周末总结 于每周一计划日程表 流程表 v8
  11. html基础 — area(图像的作用区域标记)
  12. 【NVIDIA】显卡报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver
  13. 华强盛HQST推出传输速度高达10Gbit/s网络变压器
  14. 自助装机配置专家点评2
  15. c++双向列表释放_SAIL-C-R-T4-A1-V0-B1温度控制仪-老友网
  16. openssl1.1.1下载地址
  17. 2021-08-23-Nginx安装与部署项目
  18. 机器学习数学知识(一) 自然数e
  19. java 线程池超时_线程池中如何控制超时时间?
  20. 吉林大学数据库系统概念2015年期末试题自做答案

热门文章

  1. Mac 切换 键盘布局(Colemak、dvorak、qwerty)
  2. 刺激战场春节版年兽全网最详细位置,另附刺激战场更新内容
  3. Web(七)CSS页面布局-网页布局页面的制作
  4. 在Java 17中偏向锁可算废了
  5. GB9706.1-2020|小议指示灯的颜色和报警
  6. 电子课件html咋阅读,html教学课件
  7. 测试人员如何区分前端和后台BUG方法流程
  8. 《无名之辈》小人物的自我证明
  9. 用MSNCartoon制作个性化卡通头像
  10. 华为机试:身高体重排序