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…

【Java split】split() 函数分割字符串出现空格的问题以及带转义符号的字符串分割为数组(106)

本文重点: 1.带转义符号的字符串转数组格式; 2.split() 函数分割空字符串后数组中元素前出现空格; 3.split() 函数分割需注意的问题; 测试代码: import java.util.ArrayList; import java.util.Arrays; import java.u…

Python 程序设计入门(013)—— 字典的操作(2):字典的常用操作总结

Python 程序设计入门(013)—— 字典的操作(2):字典的常用操作总结 目录 Python 程序设计入门(013)—— 字典的操作(2):字典的常用操作总结一、获取字典中元素…

JUC并发编程之CAS

目录 1.什么是CAS 1.1 CAS的定义 1.2 CAS的应用场景 2. CAS的原理 2.1 比较和交换操作 2.2 CAS的实现原理 2.3 CAS的ABA问题及解决方案 3. Java中的CAS 3.1 java.util.concurrent.atomic 包 3.2 AtomicInteger 与 AtomicLong 3.3 ABA问题的解决:AtomicSta…

JavaScript 原型链解析,宏任务和微任务

目录 什么是原型链? 原型与构造函数 原型链的工作原理 实例:理解原型链 宏任务(Macro Task) 微任务(Micro Task) 什么是原型链? JavaScript 是一门基于原型的语言,而原型链是…

C# 有效的字母异位词

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

11. Redis基础知识

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

Netty:ByteBuf的最大快速可以写入字节数

说明 通过io.netty.buffer.ByteBuf的maxFastWritableBytes()函数可以得到最大快速可写入字节数。最大快速可写入字节数表示没有内部再分配内存的情况下肯定可以写入的最大字节数。maxFastWritableBytes() capacity(容量) - writerIndexwritableBytes()…

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

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

Java经典面试题总结(一)

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

Diffusion-GAN: Training GANs with Diffusion

目录 Abstract 1. Introduction 2. Preliminaries: GANs and diffusion-based generative models 3. Diffusion-GAN: Method and Theoretical Analysis 3.1 Instance noise injection via diffusion 3.2 Adversarial Training 3.3 Adaptive diffffusion 3.4 Theoretica…

微服务技术栈

微服务技术栈是指在开发和构建微服务架构时使用的一组技术和工具。微服务架构是一种软件开发模式,将一个大型应用程序拆分为一组小型、自治的服务,每个服务独立部署、可独立扩展,并通过轻量级的通信机制进行互相协作。 微服务技术栈通常包括…

Netty 入门指南

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

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

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

[CKA]考试之集群故障排查 – kubelet故障

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 一个名为wk8s-node-0的节点状态为NotReady,让其他恢复至正常状态…

c++调用ffmpeg api录屏 并进行udp组播推流

代码及工程见https://download.csdn.net/download/daqinzl/88155241 开发工具&#xff1a;visual studio 2019 播放&#xff0c;采用ffmpeg工具集里的ffplay.exe, 执行命令 ffplay udp://224.1.1.1:5001 主要代码如下: #include "pch.h" #include <iostream>…