对嵌入式系统、GCC、的理解

1、嵌入式系统通用硬件组成 

 2、Linux系统的嵌入式的开发流程

3、Linux系统的嵌入式的结构

4、文件IO和标准IO?

5、为什么需要交叉编译

        1、嵌入式系统硬件的限制(CPU处理能力不如电脑、存储空间小、网络带宽小不利于传输、安全性不如电脑、能耗问题) 

        2、交叉编译的定义:在X86PC机上,编译出能够在目标机上运行的程序代码(如ARM :arm-linux-)

        3、交叉编译工具常用:gcc(GNU Compiler Collection,简称GCC)、GNU工具集(编译工具+调试工具+协助开发工具make等+其他工具如链接)

6、编译器的编译流程图

文本->二进制文件

编译流程补充:

指令:-E--> -S --> -c -->

生成:.c --> .i --> .S --> .o --> .elf --> .bin

编译:
    gcc XXX.c 成功就会生成一个可执行文件 a.out
运行:
    ./a.out
可执行文件重命名:
    gcc XXX.c -o app 编译成功就会生成app
运行:
    ./app
  编译的四个阶段:
    1.预处理 展开头文件和宏生成.i文件
        gcc -E XXX.c -o XXX.i
    2.编译 检查语法错误,生成汇编文件 .s
        gcc -S XXX.i -o XXX.s
    3.汇编 生成二进制文件 .o
        gcc -c XXX.s -o xxx.o
    4.链接(库),生成可执行文件

        (可执行文件要么是a.out 要么是.elf(改名是另一回事))
        gcc XXX.o -o app

/*makefile举例*/

all:
    arm-linux-gcc start.S -o start.o -c
   arm-linux-gcc main.c -o main.o -c               
   arm-linux-ld start.o main.o -o start.elf -Ttext=0x0//ld链接、重定位生成elf二进制文件
   arm-linux-objcopy start.elf start.bin -O binary        //生成可执行的二进制文件 objcopy表示文件格式转换
clean:
    rm *.o

附带GCC基本用法

常出现的错误:语法错误、未定义符号错误、链接错误、库错误(头文件)     所以不必慌张    

7、二进制工具Binutils

addr2line的使用:在有设定了调试信息的可执行文件时,可以使用addr2line工具来获取某个地址处的函数名和行号信息

$ addr2line -f -e binary 0x1000

其中,-f选项表示显示函数名,-e选项后面跟的是要查询的可执行文件名,0x1000是要查询的地址。

输出:/path/to/source/file.c:20  表示地址0x1000处的代码来自file.c文件的第20行。

strip和nm

$表示分隔符

readelf

size

通过二进制工具可以对机器码进行反编译,反编译和破解的区别:破解涉及到修改源码

8、开发板启动流程

所以bootloader是硬件启动前的一段程序而已,知道这个就可以了

bootloader->kernel->aoolication

9、嵌入式Linux开发模式(串口、网口、内存、挂载、flash、nfs)

串口:tftp协议        或者ARM用到的"发送文件"

网口:nfs服务器共享目录

tftp和JTAG和nfs都是两机通讯的方式

 系统移植-1-环境搭建

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

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

相关文章

关于GitHub国内打不开的有效解决办法

哈喽大家好,我是咕噜美乐蒂,很高兴又见面啦! GitHub是全球最大的开源代码托管平台之一,但由于某些原因,它在中国大陆地区经常会遭受网络封锁,导致无法正常访问。如果您也遇到了这个问题,不要担…

【计算机网络】——TCP协议

📑前言 本文主要是【计算机网络】——传输层TCP协议的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句…

前端面试题-说说你了解的js数据结构?(2024.1.29)

1、数组 (Array) 数组是一组有序的值的集合,可以通过索引访问。JavaScript 数组可以包含不同的数据类型,并且长度是动态的。 let myArray [1, hello, true, [2, 3]];2、对象 (Object) 对象是无序的键值对的集合。每个键都是字符串或符号,…

安全刷写简单说明

文章目录 1.安全刷写的目的2.安全刷写的实现3.安全刷写的要求4.签名说明5.刷写过程 1.安全刷写的目的 为了避免ECU被恶意篡改数据,从而导致ECU功能失效。 2.安全刷写的实现 目前很多厂商会使对软件进行签名操作,从一定程度上实现安全刷写的目的。 3.…

【学网攻】 第(16)节 -- 扩展ACL访问控制列表

系列文章目录 目录 系列文章目录 文章目录 前言 一、ACL(访问控制列表)是什么 ? 二、实验 1.引入 实验目标 实验步骤 实验设备 实验拓扑图 实验配置 配置ACL访问控制 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识…

2024 年, Web 前端开发趋势

希腊哲学家赫拉克利特认为,变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域,新技术、开发趋势、库和框架不断涌现,变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

FPS游戏框架漫谈第七条

小地图制作流程漫谈: 1.由于场景导出地图顶视图结构给原画 2.原画会对其进行加工处理 3.经过原画处理后的资源给到还原,还原合入游戏内 4.拿的的资源一般是256256 5.场景需要提供一些采样参数给程序 一般3组即可 每组参数是场景中的坐标和顶视图中屏幕坐…

Python机器学习--简单清晰的说说K近邻算法的基本原理

K近邻算法的基本原理:首先通过所有的特征变量构筑起一个特征空间,特征空间的维数就是特征变量的个数,然后针对某个测试样本,按照参数K在特征空间内寻找与它最为近邻的K个训练样本观测值,最后依据这K个训练样本的响应变…

Codeforces Round 871

目录 A. Love Story B. Blank Space C. Mr. Perfectly Fine D. Gold Rush E. The Lakes F. Forever Winter G. Hits Different H. Don’t Blame Me A. Love Story 直接逐个匹配 string a"codeforces"; void solve() {string s; cin>>s;int cnt0;for(i…

快速理解MoE模型

最近由于一些开源MoE模型的出现,带火了开源社区,为何?因为它开源了最有名气的GPT4的模型结构(OPEN AI),GPT4为何那么强大呢?看看MoE模型的你就知道了。 MoE模型结构: 图中&#xff0…

Netty-ChannelHandle的业务处理

ChannelHandle结构 ChannelHandler基础接口 基础接口里面定义的基础通用方法。增加handler,移除handler,异常处理。 ChannelInboundHandler public interface ChannelInboundHandler extends ChannelHandler {/*** The {link Channel} of the {link Ch…

猫突然不吃东西没精神?性价比高可以迅速恢复精神的生骨肉冻干推荐

猫突然不吃东西没精神怎么办?当猫咪不吃东西、精神不振时,可能是由于健康问题、环境因素或食物原因所引起。首先应进行身体检查,观察是否有其他并发症,如无则可排除健康问题。为猫咪提供安全舒适的环境、给予关爱,可改…

亚信安慧AntDB:AntDB-M元数据锁(七)

5.4.5 慢路径锁的授予条件 当且仅当满足如下两个条件时,才可以授予锁。 1. 其他线程没有持有不兼容类型锁。 2. 当前申请的锁的优先级高于请求等待列表中的。 首先通过锁位图判断等待队列,不兼容则不能授予锁。再判断快速路径,不兼容则不…

win11下 “pytorch导出模型“ 以及 “C++使用onnxruntime部署”

部分一:PyTorch导出模型 在Win11下,PyTorch是一个强大的深度学习框架,它提供了丰富的工具来训练和导出模型。在这一部分,我们将使用鸢尾花数据集,演示如何在PyTorch中训练一个简单的模型,并将其导出为ONNX…

改变this指针的三个方法?

要改变 this 的指向,JavaScript 提供了一系列的方法: call(): 使用 call() 可以直接改变 this 的指向。它接受两个参数:第一个是要调用的目标函数,第二个是将作为 this 的值的对象或对象引用的数组。例如&#xff0c…

protobuf-go pragma.go 文件介绍

pragma.go 文件 文件位于: https://github.com/protocolbuffers/protobuf-go/blob/master/internal/pragma/pragma.go 该文件核心思想: 利用 Golang 语法机制,扩展 Golang 语言特性 目前,该文件提供以下 4 个功能: …

C++STL模板库

类&#xff1a; pair: 头文件&#xff1a;<utility> 定义&#xff1a; 是一个标准库类型。可以看作是有两个成员变量first和second的结构体&#xff0c;并且重载了<运算符(先比较first大小&#xff0c;再比较second大小)当我们创建一个pair时&#xff0c;必须提供两…

SQLite 简介

什么是SQLite&#xff1f; SQLite是一个轻量级的嵌入式关系型数据库&#xff0c;它以一个小型的C语言库的形式存在。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&#xff0c;在嵌入式设备中&#xff0c;可能只需要几…

机器学习面试题总结60-99

目录 60、Python到底是什么样的语言? 61.Python是如何进行内存管理的? 引用计数和垃圾回收。

leetcode-存在重复元素

217. 存在重复元素 把列表转成集合&#xff0c;我们知道集合中是没有重复元素的&#xff0c;然后和原列表的长度做对比&#xff0c;不相等说明是有重复元素的 class Solution:def containsDuplicate(self, nums: List[int]) -> bool:if len(set(nums)) len(nums):return …