全志V3S嵌入式驱动开发(编译器升级到7.5)

news2024/10/7 0:03:35

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        看过我们文章的朋友都知道,前面为了做v3s的驱动,对linux kernel进行了两次升级。第一次升级是从4.10.y升级到4.14.y,另外一次升级是从4.14.y升级到5.2.y。这中间最主要的原因,就是为了驱动适配的需要,更新的内核可以对硬件驱动有更好的支持,架构也更合理。

        如果说内核升级尚且可以理解,那为什么要对编译器升级呢?这里面,最重要的一点就是语言的升级。如果平时开发语言用到c++的同学应该也不陌生,这几年c++的标准一直在修改。这也导致了很多开源软件的写法也在同步修改。所以就有可能出现这样一种状况,那就是用老的编译器无法编译新的开源代码,这就是非常遗憾的一件事情。所以为了解决这一问题,我们也同样对编译器进行了升级,从6.3.1升级到7.5。

1、选择什么样的编译器

        编译器最好和kernel比较匹配,比如kernel 5.2.y是在2019年发布的,所以我们可以选择在2019年release出来的gcc交叉编译器,比如7.5,

https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/

2、更新环境变量

        如果之前的编译器路径已经写到了.bashrc文件当中,那我们只需要解压一下编译器包,修改一下路径即可。因为编译器还都是arm-linux-gnueabihf-这样的前缀,所以除了环境变量,其他uboot、kernel、buildroot也只是重新编译下就可以了。

export PATH=$PATH:/home/feixiaoxing/gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf/bin

3、重新编译uboot、测试

        首先需要重新编译的就是uboot。之前的配置要记得进行保留,输入make clean就好。接下来就是重新编译make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-。结束之后,再用dd工具烧入到sd卡里面测试下,确保没有问题。

make clean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

4、重新编译内核和dtb,结束后烧入测试

        uboot测试没有问题之后,同样要对kernel 5.2.y重新进行编译。步骤和uboot差不多,第一步是clean之前生成的中间文件。第二步,重新编译。第三步,分别拷贝dtb和zImage到sd卡,查看是否可以正常启动。

make clean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

sudo cp /home/feixiaoxing/Desktop/linux-zero-5.2.y/arch/arm/boot/zImage .
sudo cp /home/feixiaoxing/Desktop/linux-zero-5.2.y/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb .

        如果一切都没有问题,可以在启动log中看到关于新编译器的打印,

Hit any key to stop autoboot:  0 
reading zImage
4337216 bytes read in 226 ms (18.3 MiB/s)
reading sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb
11542 bytes read in 26 ms (432.6 KiB/s)
## Flattened Device Tree blob at 41800000
   Booting using the fdt blob at 0x41800000
   Loading Device Tree to 42dfa000, end 42dffd15 ... OK
Cannot setup simplefb: node not found

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.2.0-licheepi-zero (feixiaoxing@feixiaoxing-VirtualBox) (gcc version 7.5.0 (Linaro GCC 7.5-2019.12)) #6 SMP Tue Jun 20 22:05:58 CST 2023
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Lichee Pi Zero
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] percpu: Embedded 16 pages/cpu s34508 r8192 d22836 u65536
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 16256
[    0.000000] Kernel command line: console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0

        看到gcc version 7.5.0打印后,这个时候就可以确认内核确实使用新编译器编译出来的。

5、重新编译buildroot、测试

        完成了uboot和kernel的重新编译之后,就可以开始buildroot的编译。要做好buildroot的编译,有两个部分要做好,第一,就是对之前根文件数据要记得保存,毕竟前面做了很多的测试和配置,中间有很多的资料可以参考和借鉴,所以这部分的内容最好做一个备份。

tar -zcvf root_back.tar.gz /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/

        第二,在buildroot中编译器的部分做修改,

         修改的地方集中在三处,1)新编译器的目录位置;2)新编译器的gcc version修改为7.x;3)kernel headers修改为4.10.x。其中最后一条似乎与5.2.y的实际kernel版本不匹配,原因是这个buildroot在2017.8才正式发布的。

        修改完毕,就可以按照uboot和kernel的三部曲开始操作了,分别是clean、make和烧入。其中烧入的话,就是备份完之前的rootfs之后,用新的rootfs来代替。

make clean
make

          接着就是正常的测试验证,如果系统正常起来,就代表ok。

6、用户程序和驱动验证

        前面依次完成了uboot、kernel和buildroot的升级。那么在上层程序这部分,用户可以自己编一些程序验证下,也可以查看一下之前的设备驱动是否ok。比如查看lcd背光是否点亮等等,

echo 34 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio34/direction
echo 1 > /sys/class/gpio/gpio34/value

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

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

相关文章

【Python】open打开文件出现的错误解决

一、Python中关于打开open打开文件出现的错误解决 (第一种)UnicodeDecodeError: ‘utf-8’.......... (第二种)UnicodeDecodeError: ‘gbk’......... 二、问题解决 两种解决方式针对不同错误,实际应用中可以都试试…

PCB设计实验|第五周|LED显示电路PCB库设计|3月27日

目录 实验四 LED显示电路PCB库设计 一、实验原理 二、实验环境 三、实验结果 四、实验总结 实验四 LED显示电路PCB库设计 一、实验原理 LED(Light- Emitting-Diode中文意思为发光二极管)是一种能够将电能转化为可见光的半导体,它改变了白炽灯钨丝发光与节能…

裁剪图片软件有哪些?这些图片裁剪工具很好用

有哪些好用的图片裁剪软件呢?有时候,将一张大图缩小到更小的尺寸可以改善图片的质量,因为它可以减少像素和噪点。这对于那些需要在网上展示高质量图片的人来说尤其重要。裁剪后的图片可能更清晰、更锐利,并且更适合在各种设备上观…

Alex-Net 与 VGG-16

Alex-Net 由加拿大多伦多大学的 Alex Krizhevsky、Ilya Sutskever(G. E. Hinton 的两位博士生)和 Geoffrey E. Hinton 提出,网络名“Alex-Net”即 取自第一作者名。 下图所示是 Alex-Net 的网络结构,共含五层卷积层和三层全连接层。其中,Ale…

03.SELF-INSTRUCT+Alpaca

文章目录 前言泛读储备知识提示学习提示工程Promt Engineering答案工程 背景介绍研究SELF-INSTRUCT的动机研究意义&贡献 精读Overview种子任务步骤1:定义指令数据步骤2:自动指令数据生成步骤2.1指令生成步骤2.2指令分类步骤2.3实例生成步骤2.4筛选和…

19.组件之间传递数据

不同组件传递数据的时候,最好不要直接传递复杂数据类型(比如对象,数组) 前端需要处理的数据层级一般不会很多,需要在多处使用的数据一般会被放到数据库中 目录 1 组件的关系 2 父向子传递数据-props 3 子向父传递数据-自定义事件 4 …

分布式任务调度平台 XXL-JOB 实战

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

Scrum敏捷估算

无论是团队研发一款产品或者开发某一个项目,我们都需要回答“我们大概什么时间能够完成?”, 或者到某一个时间点,我们能够做到什么程度, 因此和传统的开发模式一样,我们在工作开始之前需要对我们需要做的事…

Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)

首先学习如何使用 Vim 打开文件。 Vim 打开文件 使用 Vim 打开文件很简单,例如在命令行模式下打开一个自己编写的文件 /test/vi.test,打开方法如下: [rootitxdl ~]# vim /test/vi.test 刚打开文件时 Vim 处于命令模式,此时文件…

CTFshow-pwn入门-前置基础pwn26-pwn28

什么是ASLR 大多数的攻击都基于这样一个前提,即攻击者知道程序的内存布局,需要提前知道shellcode或者其他一些数据的位置。因此,引入内存布局的随机化能够有效增加漏洞利用的难度,其中一种技术就是ASLR(Address Space…

无线wifi视频传输方案|基于qca9531方案SKW99的无线视频流云端推送方案

为满足物联网智慧校园,智能家居,智慧工厂,智能交通、智慧博物馆、培训机构等不同行业实时直播的需求。本篇以集成200万高清摄像头功能的高通方案qca9531 wifi模块SKW99为为例,简单介绍基于WiFi技术的无线视频流云端推送方案。 1、…

上位机与两台PLC之间无线PPI通信

在实际系统中,人机界面与PLC通常不在一起,中心计算机一般放置在控制室,而PLC安装在现场车间,二者之间距离往往从几十米到几千米。如果布线的话,需要挖沟施工,比较麻烦,这种情况下比较适合采用无…

0基础学习VR全景平台篇第47篇:底部菜单-场景/分组复制功能

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,底部菜单—场景/分组复制功能操作。 功能位置示意 一、本功能将用在哪里? 平台用户在编辑作品时可以使用本功能将作品中的某一分组或者某一场景进行复…

岩土工程监测案例:完整链条的振弦传感器、采集仪和在线监测系统

岩土工程监测案例:完整链条的振弦传感器、采集仪和在线监测系统 在岩土工程监测中,振弦传感器被广泛应用于测量土体或岩体的振动情况,以了解地震或其他振动事件对结构物或地基的影响。振弦传感器具有高精度、快速响应、易于安装和低成本等优…

django校园宿舍管理系统-计算机毕设 附源码84831

django校园宿舍管理系统 摘 要 本论文主要论述了如何使用Django开发一个校园宿舍管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校园宿舍管理系统的当…

RocketMQ部署之动态设置JVM启动参数

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 线上的RocketMQ集群有运行一段时间了。比如测试环境和线上环境的RocketMQ集群部署的机器内存大小肯定不一样。所以可能要写多个部署脚本。非常麻烦 官方的部…

一张图秒懂嵌入式Linux系统的启动流程

一图胜千言!看图: 上图是嵌入式系统启动流程图,图中红色的数字圆点表示启动的先后顺序。主要分为 4 个阶段,分别是:第一阶段 bootloader,第二阶段uboot,第三阶段内核启动,第四阶段 a…

【数据管理架构】OLAP 与 OLTP:有什么区别?

这些术语经常相互混淆,那么它们的主要区别是什么?您如何根据自己的情况选择合适的术语? 我们生活在一个数据驱动的时代,使用数据做出更明智决策并更快响应不断变化的需求的组织更有可能脱颖而出。您可以在新的服务产品&#xff08…

理想吹响城市NOA号角:激光雷达车型又火了

作者 | 德新编辑 | 王博 2023下半年,以华蔚小理为代表的智能驾驶头部厂商,其高阶辅助驾驶全面进城。 在过去短短一周时间里,蔚来、华为、理想、小鹏紧锣密鼓悉数公布了新进展。此外据HiEV了解,比亚迪、智己、飞凡等品牌的智驾团队…

excel爬虫相关学习2:vba 爬虫相关xmlhttp

目录 前言:vba 爬虫相关xmlhttp的方法 1 什么是xmlhttp 1.1 定义 1.2 特点 1.3 创建xmlhttp对象的过程 1.4 XMLHTTP对象创建的几种方法: 2 XMLHTTP方法: 2.1 xmlhttp.open(Method, Url, Async, User,Password) 2.1.1 xmlhttp.open(…