当前位置: 首页 > web >正文

Linux驱动09 --- 环境搭建

目录

一、驱动编程

二、SDK 的编译

2.1 SDK 含义

2.2 获取 SDK

2.3 安装一系列的依赖库

2.4 解压 SDK 

2.5 释放缓冲区

2.6 编译 SDK

2.7 编译问题

2.8 编译完成的标志

三、底层驱动编程

3.1概念

四、裸机启动流程

4.1概念

五、硬件环境

六、超级终端的安装

七、固件烧录

7.1 驱动安装

7.2 固件下载

7.3 挂起虚拟机

​编辑

八、板子的调试

8.1 配置交叉编译工具

8.2 找不到方舟


一、驱动编程

        会分为两个部分

                1. 底层驱动编程

                        在底层驱动编程中,会有两个核心

                        环境搭建 --- Linux 操作系统

                        底层驱动开发方法

                                字符设备文件 --- 依附于系统运行

                2.后期上层的音视频开发

        编译 SDK、裸机启动流程、烧录固件

        驱动编程的环境要求

                至少 ubuntu 需要 80G 的内存 ,编译的时候最好用 4G 的运行内存

1.1 运行内存修改

        首先需要将虚拟机关机

1.2 设置管理员密码

        sudo passwd root

二、SDK 的编译

2.1 SDK 含义

        软件开发工具包(Software Development Kit,SDK)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。

        常见的名词 SDK、API、OTG 等

        在嵌入式开发中,SDK 一般情况下为.tar.??文件,如果是在找不到,就问厂家,SDK 在当前的驱动开发中是一个简化了环境搭建过程的方式

        开发者只需要使用极少的操作就可以完成一个完整操作系统镜像的生成

        好与坏 :

                好在于:操作简单

                不好在于:对于硬件设备要求较高

        官方给的参考虚拟机硬件环境 --- 8 核+16G+200G

        在这样的硬件环境下,才勉强能够编译成功,另外不好在于对于环境的更改,刚上手可能比较迷茫

2.2 获取 SDK

确保网络连接

2.3 安装一系列的依赖库

编译环境的时候,会依赖一部分其它的库

例如:在编译 mysql 程序的时候,就要依赖 libmysqlclient-dev

2.4 解压 SDK 

        tar -xf 包的名字

        sync         //sync同步数据

2.5 释放缓冲区

        sudo rm ~/.cache/vmware/ -r

        df -h

        SDK 中的重要内容

               

        buildroot:文件系统制作工具

        build.sh:这个是最直观的接触的编译文件

        shell 脚本 --- 将一堆指令集合成为一个指令

        kernel:内核文件夹 --- 用来编译程序

        设备树

        prebuilts:存放了交叉编译工具

        rockdev:存放编译完成的镜像

2.6 编译 SDK

        设置临时交换分区

        作用在于:尽可能避免编译出错

        要求物理内存>=4G

         选 5 然后输入: ./build.sh

        编译的内容,主要为:

                uboot,内核,文件系统 --- 这三者是一个操作系统的重要组成部分

                uboot 启动引导程序 --- 作用相当于 --- BIOS

                内核:Linux 下的核心部件

                文件系统:系统的组成部分之一

                内核和文件系统都是操作系统的重要组成部分

2.7 编译问题

问题原因:硬件资源不足以支持编译的工具  解决:1、每次报错都重新执行

问题原因:中文路径

解决方式:1、可以先尝试将 SDK 整个文件夹 mv 到没有中文路径的文件夹中,然后重新编译

                2、如果不行,那么就将 SDK 文件夹删除,然后将 SDK 压缩包放到没有中文路径的地方进行解压,重新编译

2.8 编译完成的标志

三、底层驱动编程

3.1概念

        Linux 下一切皆文件

        键盘是一个文件:/dev/input/event1

        鼠标是一个文件:/dev/input/event2

        屏幕是一个文件:/dev/fb0

        对于我们来说,系统编程是使用了系统的文件接口

        驱动编程要求我们自己去写一个文件的文件接口

                而这个文件叫字符设备文件 --- c

                字符设备文件对应的就是接入系统的一个硬件设备,换句话说:驱动编程是将一个硬件设备描述成为一个文件,系统通过操作这个文件进而操作硬件设备/获取硬件设备信息我们是需要去描述这个文件接口

四、裸机启动流程

4.1概念

        BL 的含义 --- BootLoader → 引导加载

        BL0

                存在于芯片的 IROM --- 内部静态存储

                这里的程序不可访问,不可更改

                由芯片厂商提供

                不同于 MCU --- MCU 的 IROM是(内部 Flash)

                        烧录 hex 文件的时候 --- 写

                        板子运行的时候 --- 读

                主要先去失能系统中的各种外设:看门狗,中断,数据缓冲区等等

                然后初始化:IRQ 和 SVC 栈空间,初始化 ZI(已经初始化的变量)和 RW(没有初始化的变量),获取复位状态,设备时钟分频和倍频,判断启动方式,检测 BL1 的完整性和安全性,跳转到 BL1 阶段运行

        BL1

                从芯片的 IROM 出来到新的存储介质去运行 --- 硬盘,SD 卡

                BL0 和 BL1 阶段的程序非常相似

                由芯片厂商提供,不可修改 --- 正常情况下只会给你一个.bin 文件

                初始化 IRQ 和 SVC 栈,判断低功耗,判断启动方式,检测 BL2 阶段的完整性和安全性,跳转到 BL2 阶段运行

        BL2

                可以由开发者去裁剪

                uboot --- 简单理解为 BIOS,用于引导系统

                        初始化时钟 --- 2.4GHz,初始化内存 --- DRAM(速度更快,空间更大)

                        搬运内核到 DRAM 中运行 --- 系统是运行在运存中,存储在应判断

                初始化 IRQ 和 SVC 栈,设置时钟主频,初始化 DRAM,判断启动方式,将系统搬运到 DRAM 中运行

                BL2 阶段真正的程序就是 uboot

                uboot 搬运的是内核,内核最终再去挂载文件系统,文件系统运行之后再去执行应用程序 --- 完整的系统才算启动

五、硬件环境

        使用的芯片是 --- RK3588s

        8 核 64 位处理器 --- 4 大核 A76 + 4 小核 A55

        主频 --- 2.4GHz

        4G+32G

六、超级终端的安装

安装在 windows 下

只需要更改路径 --- 路径最好不要在 C 盘,不要有中文

七、固件烧录

7.1 驱动安装

是为了能够正确的识别板子

7.2 固件下载

        配置文件的作用:规划了 uboot,内核,文件系统需要存放的位置 --- 地址信息

                不同的板子的地址信息是不同的

         parameter.txt 是一个链接文件,需要找到他的源文件

7.3 挂起虚拟机

        板子,双端 USB 的蓝色线,电源

        双端 USB 的蓝色线接在板子上的 USB3.0 接口(唯一一个蓝色的)

        板子有三个模式

        ADB 模式

                调试模式 --- 板子正常运行的模式

                在这个模式下可以运行自己的程序

        LOADER 模式

                烧录单个固件

                例如:单独烧录内核

                但是对于 RK3588s --- 可以在 LOADER 模式下烧录整体的镜像

        MASKRAM 模式

                烧录整体固件的模式

                今天用来烧录 --- update.img

八、板子的调试

8.1 安装 ADB 插件 

                adb shell --- 将当前终端作为嵌入式设备的终端

        在板子的终端之下,几乎所有的 Linux 指令都可以用

        板子和 ubuntu 的架构不同,双方的可执行程序在彼此的系统上无法运行,所以就需要交叉编译工具

        

        adb push ubuntu 下的文件 到 板子终端的路径

        将 ubuntu 下的文件传输至板子终端的路径

        当出现下述错误,说明生成可执行程序的交叉编译工具不对

8.1 配置交叉编译工具

        添加交叉编译工具路径

export PATH=$PATH:/home/lll/driver/RK3588S/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin

如果执行这个语句出错,那么就说明刚才加的语句有问题

重启虚拟机

8.2 找不到方舟

      

http://www.xdnf.cn/news/15367.html

相关文章:

  • 计算机毕业设计Java停车场管理系统 基于Java的智能停车场管理系统开发 Java语言实现的停车场综合管理平台
  • 如何检测自动化设备中的直线导轨品质是否优良?
  • UE5多人MOBA+GAS 19、创建升龙技能,以及带力的被动,为升龙技能添加冷却和消耗
  • 【408考研知识点全面讲解计算机学科专业基础综合(408)】——数据结构之排序
  • SELECT ... INTO OUTFILE和LOAD DATA INFILE
  • 请求服务端获取broker的机房归属信息异常
  • 【C#】GraphicsPath的用法
  • ai批量抠图win和mac都可以用
  • 数据库连接池及其核心特点
  • Spring Boot整合MyBatis+MySQL+Redis单表CRUD教程
  • OneCode 3.0 DDD领域模型开放接口:基于DSMFactory的架构解析与实践指南
  • 创建 UIKit 项目教程
  • 浅谈npm,cnpm,pnpm,npx,nvm,yarn之间的区别
  • 周末总结(2024/07/12)
  • 小架构step系列12:单元测试
  • 为什么有些PDF无法复制文字?原理分析与解决方案
  • 知识宇宙-思考篇:AI大模型如何重塑软件开发流程?
  • MCP选型指南:AWS vs Azure vs GCP vs 国内云厂商深度对比
  • openGauss 的列式存储表时遇到的排序和聚合查询性能问题
  • mybatis模糊匹配采用concat与#{},动态sql讲解
  • Flutter、React Native、Uni-App 的比较与分析
  • 80. 删除有序数组中的重复项 II
  • brpc中bthread_start_urgent和tls_task_group详细机制分析
  • 使用python 实现一个http server
  • 传感器WSNs TheDataLinkLayer——X-MAC
  • 基于随机森林的金融时间序列预测系统:从数据处理到实时预测的完整流水线
  • [特殊字符] 实时数据洪流突围战:Flink+Paimon实现毫秒级分析的架构革命(附压测报告)——日均百亿级数据处理成本降低60%的工业级方案
  • 【离线数仓项目】——电商域DWS层开发实战
  • 使用FastAdmin框架开发
  • 蒙特卡洛树搜索方法实践