对嵌入式系统、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,一经查实,立即删除!

相关文章

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

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

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

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

2024 年, Web 前端开发趋势

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

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

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

快速理解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. 当前申请的锁的优先级高于请求等待列表中的。 首先通过锁位图判断等待队列,不兼容则不能授予锁。再判断快速路径,不兼容则不…

状态码400以及状态码415

首先检查前端传递的参数是放在header里边还是放在body里边。 此图前端传参post请求,定义为’Content-Type’:‘application/x-www-form-urlencoded’ 此刻他的参数在FormData中。看下图 后端接参数应为(此刻参数前边什么都不加默认为requestP…

Qt QScrollArea 不显示滚动条 不滚动

使用QScrollArea时,发现添加的控件超出QScrollArea 并没有显示,且没有滚动条效果 原因是 scrollArea指的是scrollArea控件本身的大小,肉眼能看到的外形尺寸。 scrollAreaWidgetContents指的是scrollArea控件内部的显示区域,里面可…

windows server 开启远程连接RDP连接

windows server 开启远程连接,RDP连接windows server 打开gpedit.msc, 找到计算机配置-管理模板-windows组件-远程桌面服务-远程桌面会话主机-授权 1 使用指定的远程桌面许可证服务器 2 设置远程桌面授权模式 3 重启windows server服务器生效 4使用mstsc命令连接…

未来每家公司都需要有自己的大模型- Hugging Face创始人分享

自ChatGPT发布以来,有人称其是统治性一切的模型。Hugging Face创始人兼首席执行官Clem Delangue介绍,Hugging Face平台已经有15000家公司分享了25万个开源模型,当然这些公司不会为了训练模型而训练模型,因为训练模型需要投入大量资…

Springboot自定义线程池实现多线程任务

1. 在启动类添加EnableAsync注解 2.自定义线程池 package com.bt.springboot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTask…

记录 | ubuntu nm命令的基本使用

什么是nm命令 nm命令是linux下针对某些特定文件的分析工具,能够列出库文件(.a、.lib)、目标文件(*.o)、可执行文件的符号表。 nm命令的常用参数 -A 或 -o 或 --print-file-name:打印出每个符号属于的文件…

webassembly003 TTS BARK.CPP

TTS task TTS(Text-to-Speech)任务是一种自然语言处理(NLP)任务,其中模型的目标是将输入的文本转换为声音,实现自动语音合成。具体来说,模型需要理解输入的文本并生成对应的语音输出&#xff0…

c++学习记录 多态—案例2—电脑组装

#include<iostream> using namespace std;//抽象不同的零件//抽象的cpu类 class Cpu { public://抽象的计算函数virtual void calculate() 0; };//抽象的显卡类 class VideoCard { public://抽象的显示函数virtual void display() 0; };//抽象的内存条类 class Memory …

Nginx启用WebSocket支持

报错内容nginx.conf proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 问题解决WebSocket跨域 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Credentials true;

常用芯片学习——AMS1117芯片

AMS1117 1A 低压差线性稳压器 使用说明 AMS1117 是一款低压差线性稳压电路&#xff0c;该电路输出电流能力为1A。该系列电路包含固定输出电压版本和可调输出电压版本&#xff0c;其输出电压精度为士1.5%。为了保证芯片和电源系统的稳定性&#xff0c;XBLWAMS1117 内置热保护和…

对鸢尾花进行分类预测-----pycharm

项目说明 #项目&#xff1a; 对鸢尾花进行分类预测 #实例数量150个(3类各50个) #属性数量&#xff1a;4(数值型&#xff0c;数值型&#xff0c;帮助预测的属性和类) #特征&#xff1a;花萼长度&#xff0c;花萼宽度&#xff0c;花瓣长度&#xff0c;花瓣宽度 单位&#xff1…

什么是事务?

事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 1. 事务管理 怎么样来控制这组操作&#xff0c;让这组操作同时成功或…