Licheepi Nano屏幕驱动并输出打印信息

Licheepi Nano买回来好长时间,没咋玩,最近看了一个利用F1C100S自制迷你电脑的博客,里面主要参考的就是Licheepi Nano。我打算先在Licheepi Nano上完成屏幕操作、Debian文件系统和USB键盘等内容,这里介绍怎样利用Licheepi Nano外接屏幕,并且将信息可以输出到屏幕上。(对了,我的屏幕并不是官方的,实在tb上买的一块40脚-rgb-4.3寸屏幕,因为Licheepi Nano板载屏幕背光驱动,买了直接插就能用)

文章目录

  • 整体思路
  • 一、Linux源码中设备树修改
    • 1.1下载内核核配置文件
    • 1.2设备树修改
    • 1.3编译make
  • 二、u-boot修改
    • 2.1u-boot下载核配置
    • 2.2可视化配置
    • 2.3编译make
  • 三、实际效果
  • 附录:参考博客和后续想移植的


整体思路

这里讲一下编译linux内核和u-boot的思路,不然很容易弄混。去官网或github下载linux内核或u-boot之后,最理想的状态就是直接make就能生成我们需要的文件,但是有那么多系统,那么多板子,所以需要利用其自带的配置文件或者自己去找配置文件,替换了.config,之后再用对应的编译器去make。

一、Linux源码中设备树修改

首先,要对内核文件进行修改和编译,具体如下:

1.1下载内核核配置文件

🍬🍬🍬下载内核文件
github上的仓库不见了,需要自己去Linux官网下载,内核文件下载参考->链接: 大佬博客,该博客里面也给出了Licheepi Nano的配置文件。我这里用的是之前github仓库中的4.14内核。

下载licheepi nano配置文件
下载配置文件并复制到源码目录下,然后改为.config

mv lichee_nano_linux.config .config

在这里插入图片描述
改为.config之后,进行可视化配置,

make ARCH=arm menuconfig
//如果没有其他的需求,直接保存即可

1.2设备树修改

🍬🍬🍬修改设备树支持屏幕
内核配置之后不能直接编译,需要对 源码目录/arch/arm/boot/dts 中的设备树文件进行修改,Licheepi Nano的设备树文件为suniv-f1c100s-licheepi-nano.dts。打开后添加panel节点:
在这里插入图片描述
其中,我的屏幕是4.3寸,480X272大小的屏幕,所以设置compatible = qiaodian,qd43003c0-40”, “simple-panel”

还要添加:
在这里插入图片描述
保存之后,然后,make,下面:

1.3编译make

我的工具链是gnueabihf,一般是gnueabi

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

make之后,在 源码目录/arch/arm/boot/dts 目录下生成suniv-f1c100s-licheepi-nano.dtb文件,还有 源码目录/arch/arm/boot 目录下的zImage拷贝到TF卡的第一分区(分区方法见前文)。

二、u-boot修改

2.1u-boot下载核配置

🍬🍬🍬u-boot下载和配置
直接从github中获取u-boot:

git clone https://github.com/Lichee-Pi/u-boot.git -b nano-v2018.01

谢天谢地,Licheepi Nano的配置文件licheepi_nano_defconfig文件在configs里面。配它!

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_defconfig

在这里插入图片描述

2.2可视化配置

🍬🍬🍬可视化配置
然后,进行可视化配置,这里需要进一步改写两个参数。

make ARCH=arm menuconfig

按y勾选boot arguments 和bootcmd两个选项。

1.boot arguments填入:

console=ttyS0,115200 panic=5 root=/dev/mmcblk0p2 rootwait rw  

其中ttyS0代表着串口0输出信息,如果要想使用屏幕打印启动信息需要添加:

console=tty1 console=ttyS0,115200 panic=5 root=/dev/mmcblk0p2 rootwait rw  

其中,tty1大概讲一下,tty代表着Linux系统的终端控制,我们都知道屏幕驱动在linux中一般都是设备节点/dev/fb0,一般设备驱动fb0会和tty1即一号终端有联系,添加console=tty1之后,启动信息就会同时打印到屏幕和串口0。
2.bootcmd填入: 一行话哦~

load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 - 0x80c08000;

这个是Licheepi Nano的一些启动参数,不详细讲了。

附图:
在这里插入图片描述

可视化设置好之后,Save,保存为.config(默认的),之后编译:

2.3编译make

//我的工具链是gnueabihf,一般是gnueabi
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

编译完生成u-boot-sunxi-with-spl.bin文件,将该文件拷贝到tf卡,注意:这里是sdb不是sdb1也不是sdb2。

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

三、实际效果

根文件系统的制作和拷贝这里就不介绍了,我这里是制作的Debian系统,最后附录给出大佬的博客链接。
插卡启动!插卡启动!插卡启动!
理论上启动信息会输出到你的串口调试助手和屏幕(这个图我没拍)。
由于Licheepi Nano没有任何输入设备,没有键盘还不能直接操作,但是可以在串口助手通过如下几条指令将一些信息打印到屏幕

ls >/dev/tty1	//注意千万不要给了fb0
ls >/dev/fb0	//错误的,这样只会在屏幕的最上边叠加一些东西。

测试图片:

在这里插入图片描述

在这里插入图片描述


附录:参考博客和后续想移植的

1、内核编译:
https://blog.csdn.net/weixin_41544435/article/details/124459930
https://www.cnblogs.com/twzy/p/15355842.html
2、u-boot移植:
https://blog.csdn.net/weixin_41544435/article/details/124459930
https://www.cnblogs.com/twzy/p/14865952.html
3、Debian文件系统制作(强烈推荐)
https://www.cnblogs.com/twzy/p/15160824.html
4、USB移植(下一步)
https://www.cnblogs.com/twzy/p/15243838.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle单实例升级补丁

目录 1.当前DB环境2.下载补丁包和opatch的升级包3.检查OPatch的版本4.检查补丁是否冲突5.关闭数据库实例,关闭监听6.应用patch7.加载变化的SQL到数据库8.ORACLE升级补丁查询 oracle19.3升级补丁到19.18 1.当前DB环境 [oraclelocalhost ~]$ cat /etc/redhat-releas…

记录--说一说css的font-size: 0

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 平常我们说的font-size:0;就是设置字体大小为0对吧,但是它的用处不仅仅如此哦,它还可以消除子行内元素间额外多余的空白! 问题描述&#xff…

leetcode 图算法小结

文章目录 1 DFS和BFS797. 所有可能的路径200. 岛屿数量 1 DFS和BFS 深度优先遍历一般采用回溯算法进行解决。回溯算法,其实就是dfs的过程。 void dfs(参数) {处理节点dfs(图,选择的节点); // 递归回溯,撤销处理结果 }广度优先搜索理解为层次…

Qt小项目贪吃蛇实线,主要掌握定时器、信号与槽、按键事件、绘制事件、坐标运算、随机数生成等

Qt小项目贪吃蛇实线,主要掌握定时器、信号与槽、按键事件、绘制事件、坐标运算、随机数生成等 Qt 贪吃蛇演示QWidget 绘制界面项目源文件 注释清晰widget.hwidget.cpp 拓展QTimerQKeyEventQRectFQPointFQPainterQIcon Qt 贪吃蛇演示 QWidget 绘制界面 项目源文件 注…

开关电源控制--电流纹波率

什么是电流纹波率 电流纹波率(Current Ripple Ratio)是开关电源控制中一个重要的参数。它表示输出电流的波动程度,通常以百分比表示。 当电流纹波率为0.4时,意味着输出电流的波动相对较小,波动范围约为输出电流的0.4…

C# 有效的字母异位词

242 有效的字母异位词 给定两个字符串 和 ,编写一个函数来判断 是否是 的字母异位词。stts 注意:若 和 中每个字符出现的次数都相同,则称 和 互为字母异位词。stst 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输…

11. Redis基础知识

文章目录 一、概述二、数据类型STRINGLISTSETHASHZSET 三、数据结构字典跳跃表 四、使用场景计数器缓存查找表消息队列会话缓存分布式锁实现其它 五、Redis 与 Memcached数据类型数据持久化分布式内存管理机制 六、键的过期时间七、数据淘汰策略八、持久化RDB 持久化AOF 持久化…

【C++从0到王者】第十八站:手把手教你写一个简单的优先级队列

文章目录 一、优先级队列简介二、优先级队列的接口说明1.基本介绍及其使用2.构造函数3.求数组中第k个最大的元素 三、手撕优先级队列四、仿函数1.仿函数介绍2.优先级队列添加仿函数3.需要自己写仿函数的情形 五、优先级队列完整代码 一、优先级队列简介 优先级队列是一种容器适…

Java经典面试题总结(一)

Java经典面试题总结(一) 题一:Java编译运行原理题二:JDK,JVM,JRE三者之间的关系题三:谈一下对冯诺依曼体系的了解题四:重载与重写的区别题五:拆箱装箱是指什么&#xff1…

Netty 入门指南

文章目录 前言Netty介绍Netty发展历程Netty核心组件实现HTTP服务器总结 前言 上文《BIO、NIO、IO多路复用模型详细介绍&Java NIO 网络编程》介绍了几种IO模型以及Java NIO,了解了在网络编程时使用哪种模型可以提高系统性能及效率。即使Java NIO可以帮助开发人员…

44.实现爱尔兰B公式计算并输出表格(matlab程序)

1.简述 1.话务量定义 话务量指在一特定时间内呼叫次数与每次呼叫平均占用时间的乘积。 话务量反映了电话负荷的大小,与呼叫强度和呼叫保持时间有关。呼叫强度是单位时间内发生的呼叫次数,呼叫保持时间也就是占用时间。 话务量计算方法 话务量公式为…

低功耗LoRaWAN国产低功耗LoRa+RF射频前端芯片XD6500S

目录 典型应用XD6500S简介芯片特性 LoRa系列选型参考 LoRa是为低数据速率、远距离距离和超低功耗而优化的扩频协议,用于LPWAN应用程序的通信。 典型应用 一、智慧农业   智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象…

HTTP协议——应用层

HTTP协议 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是 应用层协议 HTTP简介 HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行…

MyBatis简介及环境配置

文章目录 一、什么是MyBatis二、MyBatis开发环境配置1.创建数据库表2.添加MyBatis框架支持3.配置连接字符串和MyBatis4.添加业务代码流程 一、什么是MyBatis MyBatis是一种持久层框架,也是一种ORM框架(Object Relational Mapping即对象关系映射&#xf…

【AutoLayout案例1-按钮居中显示 Objective-C语言】

一、按钮居中显示 1.接下来,我们就用这个autoLayout,自动布局,给大家写一个,实现几个案例,给大家看一下 那么,首先,第一个,大家注意, 当我们使用autoLayout,自动布局的时候,我们新建一个项目, 这个新建的项目,里面有一个控制器,这个控制器,是不是默认,是四四…

基于短信宝API零代码实现短信自动化业务

场景描述: 基于短信宝开放的API能力,实现在特定事件(如天气预警)或定时自动发送短信(本文以定时群发短信为例)。通过Aboter平台如何实现呢? 使用方法: 首先创建一个IPaaS流程&…

iPhone苹果手机地震预警功能怎么开启?

iPhone苹果手机地震预警功能怎么开启? 1、打开iPhone苹果手机设置; 2、在iPhone苹果手机设置内找到辅助功能; 3、在辅助功能内找到触控; 4、在iPhone苹果手机辅助功能触控内找到振动,如果是关闭状态请启; …

C++ STL vector

目录 一.认识vector 二.vector的使用 1.vector的构造函数 2.vector的迭代器 2.1 begin(),end() 2.2 rbegin(),rend() 2.3 迭代器初始化对象 3. vector…

Linux中安装Tomcat

Linux安装Tomcat 操作步骤: 1、使用FinalShell自带的上传工具将Tomcat的二进制发布包上传到Linux 2、解压安装包,命令为tar -zxvf apache-tomcat-7.0.57.tar.gz -C /usr/local 3、进入Tomcat的bin目录启动服务,命令为sh startup.sh或者./ startup.sh …

leetcode每日一练-第278题-第一个错误的版本

一、思路 二分查找——因为它可以快速地将版本范围缩小一半,从而更快地找到第一个坏版本。 二、解题方法 维护一个左边界 left 和一个右边界 right,在每一步循环中,我们计算中间版本 mid,然后检查它是否是坏版本。如果是坏版本…