嵌入式Linux的学习之初试uboot

背景

在工作中,部门里的嵌入式大屏设备都是安卓开发的。但是安卓系统对硬件要求会高一些,成本也高,部门打算换为Linux系统。遂开始回忆嵌入式Linux系统的开发,并且找了一些教程学习。
找教程的过程真的很艰辛啊,很多开发板以及配套教程都是面对初学者,花费大量篇幅去讲解Linux基础命令,文件结构,虚拟机安装过程,ftp,nfs等环境配置之类的。而且视频教程没法自主选择重点学习的内容。

教程

个人比较喜欢文字教程,博客或者书籍,能够自己把握学习内容,节约时间。经过多方研究,还是找到了当年大学里的推荐教材,文全刚主编的《嵌入式linux操作系统原理与应用》。看前言是由吉大,北航的教授参与编著,从内容上看,基本能够涵盖市面主流入门教程的所讲的东西。

学些什么?

嵌入式Linux系统首先是Linux系统,那么首先就要包含学习Linux系统的一些列知识:

Linux:

  1. 了解概念,发展历史与应用
  2. 了解操作,结构,shell脚本
  3. gcc,gdb,makefile
  4. 编程方面了解IO,进程控制,通信,同步以及多线程

嵌入式:

  1. 嵌入式开发流程
  2. bootloader,内核,文件系统移植
  3. 驱动开发
  4. 应用开发:gui,数据库,网络编程

看上去东西也不多,像我如果有Linux,C,GUI开发基础的话,只需要学习下面嵌入式开发的2.3.两点即可。

BootLoader

此处省略一万个理论概念,简单讲,让是用来检测和初始化硬件,启动操作系统的一小段程序。常见的armboot,uboot,redboot,vivi等。很多教程都是用的uboot。
此处为uboot官方使用文档地址:

https://u-boot.readthedocs.io/en/latest/

在了解BootLoader的功能和作用,可以按照文档学习和使用。再附上Ubuntu下载地址:

https://releases.ubuntu.com/22.04/

安装好操作系统,虚拟机或者双系统都可以,根据文档操作即可。当然配环境的过程就不再赘述了如果遇到什么问题,欢迎留言一起交流。
笔者配好环境以后,以树莓派为例,先尝试编译了把:
因为uboot本身附带了众多开发板的配置文件(configs文件夹下),其中就包括树莓派,在u-boot文件夹下执行,如果你的板子是全新的,那就要自己在u-boot中适配添加配置以适配你的开发板,这个我们留到后面去讲。

make rpi_4_defconfig
CROSS_COMPILE=aarch64-linux-gnu- make

最终编译成功。uboot的文档(doc目录下)比较详细,建议仔细阅读。编译出的文件如下:

-rwxrwxr-x   1 ql ql 4747624  813 15:26 u-boot #elf格式
-rwxrwxr-x   1 ql ql 1779904  813 15:26 u-boot.srec #s-record 格式
-rwxrwxr-x   1 ql ql  619056  813 15:26 u-boot.bin #二进制格式,最常用
-rw-rw-r--   1 ql ql  120173  813 15:26 System.map #映像符号表

理论上以上几种格式都是可以用的,但是要看加载器能不能识别这些格式。

后面笔者也会以具体开发板为例进行开发,并记录学习过程,欢迎大家交流。

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

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

相关文章

http get、post、put

HTTP协议定义了多种请求方法,用于不同的操作。最常见的有 GET、POST 和 PUT。 GET:GET 是最常用的方法,通常用于请求服务器发送某个资源。GET 请求只通过 URL 传送数据,数据信息会附在 URL 之后,以参数的形式附加。由于这种传送方式的限制,GET 请求的数据量较小,且安全性…

Spring Boot开发指南

目录 1. 构建系统 1.1. 依赖管理 1.2. Maven Maven项目结构 1.3. Starter 2. 代码结构 2.1. “default” 包 2.2. 启动类的位置 3. Configuration 类 3.1. 导入额外的 Configuration 类 3.2. 导入 XML Configuration 4. 自动装配(配置) 4.1…

web集群学习:基于CentOS 7构建 LVS-DR 群集并配置服务启动脚本

目录 1、环境准备 2、配置lvs服务启动脚本 1、在RS上分别配置服务启动脚本 2、在lvs director上配置服务启动脚本 3、客户端测试 配置LVS-DR模式主要注意的有 1、vip绑定在RS的lo接口; 2、RS做arp抑制; 1、环境准备 VIP192.168.95.10 RS1192.168…

Qt应用开发(基础篇)——时间微调输入框QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类,这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件,父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

Android 13 Hotseat定制化修改——005 hotseat图标禁止形成文件夹

目录 一.背景 二.方案 一.背景 由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动…

嘉楠勘智k230开发板上手记录(三)--K230_GPU应用实战

按照K230_GPU应用实战.md 一、开发环境的准备 在src下创建文件夹,并在文件夹中创建Makefile mkdir my_vglite_code cd my_vglite_codeMakefile # SDK地址 K230SDK ? /root/k230/k230_sdk-main # 生成的可执行文件名字 BIN : test-vglite# 指定交叉编译器 CC : …

微信小程序中背景图片如何占满整个屏幕,拉伸

不变形 1. 在页面的wxss文件中,设置背景图片的样式: page{background-image: url(图片路径);background-size: 100% 100%;background-repeat: no-repeat; }2. 在页面的json文件中,设置背景图片的样式: {"backgroundTextStyl…

python-爬虫作业

# -*- coding:utf-8 -*-Author: 董咚咚 contact: 2648633809qq.com Time: 2023/7/31 17:02 version: 1.0import requests import reimport xlwt from bs4 import BeautifulSoupurl "https://www.dygod.net/html/gndy/dyzz/" hd {user-Agent:Mozilla/4.0 (Windows N…

Adaptive AUTOSAR—— Communication Management 3.1

9 Communication Management 9.1 What is Communication Management? 通信管理是自适应平台架构中的一个功能集群。 作为一个功能集群,通信管理向应用程序提供了一个C++ API,实现了面向服务的通信。服务是一个由应用程序提供的功能单元,可以在运行时被另一个应用程序动态…

【新版系统架构补充】-信息系统基础知识

信息系统 信息系统的5个基本功能:输入、存储、处理、输出和控制 信息系统的分类(低级到高级):业务(数据)处理系统(TPS/DPS)、管理信息系统(MIS)、决策支持系…

JAVA Android 正则表达式

正则表达式 正则表达式是对字符串执行模式匹配的技术。 private void RegTheory() {// 正则表达式String content "1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2) " "的3个版本:…

PostgreSQL 使用SQL

发布主题 设置发布为true 这个语句是针对 PostgreSQL 数据库中的逻辑复制功能中的逻辑发布(Logical Publication)进行设置的。 PostgreSQL 中,逻辑复制是一种基于逻辑日志的复制方法,允许将数据更改从一个数据库实例复制到另一…

git撤回最近一次push操作

git push -f origin HEAD^:branch_name其中,branch_name 是你想要撤回 push 操作的分支的名称。 这个命令将会强制推送到远程仓库,将远程分支回滚到上一个提交(HEAD^ 意味着上一个提交)。这样做会丢失最近一次 push 的更改&#…

Linux文件属性与权限管理(可读、可写、可执行)

Linux把所有文件和设备都当作文件来管理,这些文件都在根目录下,同时Linux中的文件名区分大小写。 一、文件属性 使用ls -l命令查看文件详情: 1、每行代表一个文件,每行的第一个字符代表文件类型,linux文件类型包括&am…

springboot高级

springboot 进阶 SpringBoot 整合 Mybatis【重点】 SpringBoot单元测试【掌握】 SpringBoot整合SpringMVC【掌握】 SpringBoot异常处理【掌握】 SpringBoot定时任务【掌握】 SpringBoot打包【掌握】 一、SpringBoot 整合 Mybatis 1、SpringBoot 整合 Mybatis MyBatis …

简单易懂的Transformer学习笔记

1. 整体概述 2. Encoder 2.1 Embedding 2.2 位置编码 2.2.1 为什么需要位置编码 2.2.2 位置编码公式 2.2.3 为什么位置编码可行 2.3 注意力机制 2.3.1 基本注意力机制 2.3.2 在Trm中是如何操作的 2.3.3 多头注意力机制 2.4 残差网络 2.5 Batch Normal & Layer Narmal 2.…

Java 多线程并发 CAS 技术详解

一、CAS概念和应用背景 CAS的作用和用途 CAS(Compare and Swap)是一种并发编程中常用的技术,用于解决多线程环境下的并发访问问题。CAS操作是一种原子操作,它可以提供线程安全性,避免了使用传统锁机制所带来的性能开…

摄影入门基础笔记

1.认识相机,传感器和镜头 微单相机和单反相机 运动相机、卡片机 微单和单反的区别? 微单的光学结构少了反光板的结构以及棱镜的结构 DSLR [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCSYr2Ob-1691407493645)(https:/…

动态规划(用空间换时间的算法)原理逻辑代码超详细!参考自《算法导论》

动态规划(用空间换时间的算法)-实例说明和用法详解 动态规划(DP)思想实例说明钢条切割问题矩阵链乘法问题 应用满足的条件和场景 本篇博客以《算法导论》第15章动态规划算法为本背景,大量引用书中内容和实例&#xff0…

PE半透明屏,在建筑行业中,有哪些应用展示?

PE半透明屏是一种新型的屏幕材料,具有半透明的特点。 它由聚乙烯(PE)材料制成,具有良好的透明度和柔韧性。 PE半透明屏广泛应用于建筑、广告、展览等领域,具有很高的市场潜力。 PE半透明屏的特点之一是其半透明性。…