![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
嵌入式开发中的总结
文章平均质量分 64
该专栏都是本人在嵌入式开发中遇到的问题,在此总结,方便以后查阅,也为遇到同样问题的同志提供参考。
正在起飞的蜗牛
这个作者很懒,什么都没留下…
展开
-
快速查看字符对应的ASCII码
1、借助gdb查看打印字符串用双引号括起来打印单个字符用单引号括起来x 表示十六机制d 表示十进制t 表示二进制2、借助二进制查看软件第一步:把要查看的字符保存到文本文件中第二步:借助二进制查看工具(比如:Hex Editor Neo)进行查看原创 2024-05-15 21:00:00 · 317 阅读 · 0 评论 -
嵌入式开发的常用软件、学习资源网站推荐
嵌入式开发常用软件、学习网站推荐原创 2024-03-06 20:30:39 · 1882 阅读 · 0 评论 -
嵌入式开发——linux系统怎么知道接了多少物理内存?
1、前言linux系统是不知道当前设备接了多少内存,需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式动态识别(X86架构大多是这种):可以插拔的内存条,bootloader能识别出内存条的容量代码里写死(ARM架构大多是这种):设备的内存是贴片上去的,不支持动态改变,内存的容量在代码里写死(系统工程师在适配程序时要根据实际物理内存容量去修改代码)2、linux系统知道实际物理内存大小的方式设备树中可以通过"/memory"节点来指定内存的起始原创 2024-02-10 11:36:48 · 404 阅读 · 0 评论 -
链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)
【代码】链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)原创 2024-01-31 18:10:08 · 1046 阅读 · 0 评论 -
GNU链接脚本的MEMORY命令解析
GNU链接脚本的MEMORY命令解析。原创 2024-01-31 17:57:38 · 419 阅读 · 0 评论 -
gcc扩展选项__attribute__((interrupt))——指定中断处理函数属性
不使用__attribute__((interrupt))修饰,函数内只需要保存被调用者保存的寄存器使用__attribute__((interrupt))修饰后,只要在函数内使用到的寄存器都必须保存再恢复,会占用更多的栈空间,翻译得到的汇编代码也会增多还可以指定中断处理函数的优化等级:只有中断处理函数才用__attribute__((interrupt))修饰,其余常规函数不要使用。原创 2024-01-20 15:32:39 · 1394 阅读 · 0 评论 -
获取编译工具链默认的链接脚本
1、ld命令使用“–verbose”参数命令:riscv64-linux-gnu-ld --verbose想使用自己的链接脚本,链接时使用“-T”指定原创 2024-01-19 22:31:02 · 413 阅读 · 0 评论 -
四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)
介绍栈溢出检测机制原创 2024-01-05 19:00:00 · 684 阅读 · 0 评论 -
嵌入式开发——移植printf函数源码到裸机程序中
【代码】嵌入式开发——移植printf函数源码到裸机程序中。原创 2023-12-24 21:00:00 · 527 阅读 · 0 评论 -
Ubuntu中编译出Windows的可执行程序(.exe)
在嵌入式开发中,交叉编译是很常见的情况,如果你把Windows电脑也看做一块高性能的开发板,那在Ubuntu中编译出Windows上运行的可执行程序也是很好理解的行为。原创 2023-12-09 23:03:50 · 920 阅读 · 0 评论 -
我为什么写博客?写博客给我带来了什么?
(1)刚开始接触CSDN,是大三的时候开始学习嵌入式开发,经常需要到网上百度查资料,由此经常游览CSDN上的博客;(2)在嵌入式的过程中,需要总结学习过的知识。以前总结知识是习惯手写,但是学习嵌入式会涉及图片和代码,手写不合适了,刚开始尝试过用word,但是使用过程很不习惯;受到其他博主在网上发布博客的启发,自己也把知识总结以博客的形式发布,个人觉得Markdown编辑器比word更容易入门;原创 2023-10-24 23:05:38 · 512 阅读 · 0 评论 -
Ubuntu常见问题解决方法
1、网络设置参考博客:《Ubuntu 22.04 配置静态IP》、《虚拟机上网设置——桥接模式 & NAT模式》;2、报错:failed to create hard link参考博客:《Ubuntu中报错:failed to create hard link》;3、修改用户密码(1)sudo passwd + 用户名;(2)输入新密码;4、切换到root用户sudo -s5、Secure CRT连接Ubuntu报错:Key exchange failedvi /et原创 2023-09-27 19:36:12 · 444 阅读 · 0 评论 -
vi配置文件.vimrc内容示例
(1).vimrc是vi编辑器的配置文件,里面可以对vi编译器做个性化配置;(2).vimrc在用户目录下,每个用户有一个,类似于.bashrc文件,将下面的配置文件内容拷贝到~/.vimrc;原创 2023-09-27 17:26:52 · 1082 阅读 · 0 评论 -
mount挂载时报错:mount.nfs: requested NFS version or transport protocol is not supported
(2)从nfs-server的状态信息里可知,是在解析"/etc/exports"文件时,出现未知关键字“no_subtree”,解析失败从而导致nfs服务器启动失败;只需要将“no-subtree”修改为“no-subtree-check”,然后重新启动nfs服务器(/etc/init.d/nfs-kernel-server restart)即可;(1)检查nfs服务器状态:systemctl status nfs-kernel-server;原创 2023-09-11 19:00:00 · 5034 阅读 · 1 评论 -
shell脚本判断MAC地址是否合法
第二步:([0-9a-f][02468ace]):表示第一个字符可以是数字0-9或者小写字母a-f,第二个字符可以是"02468ace"中的任意一个;):第一个字符必须是冒号,第二和第三字符可以是数字0-9或者小写字母a-f;第一步:^和$:两个符号之间是要匹配的字符串格式;第四步:{5}:把第三步的匹配重复5次;原创 2023-08-15 21:44:57 · 1448 阅读 · 0 评论 -
嵌入式开发中常用且杂散的命令
【代码】嵌入式开发中常用且杂散的命令。原创 2023-08-15 21:35:23 · 323 阅读 · 0 评论 -
谈谈嵌入式开发中签名校验和加解密作用的理解
(1)各家公司都有自己的可信加签和固件加密的方法,加密算法也不相同,有的是自己公司研发的,有的从专门做安全防护业务公司那里买的加密算法;(2)可信验签和固件加密的原理不同,有的是靠软件,有的是靠硬件(芯片自带安全模块 或者 外接一块加解密芯片);(3)除了维护可信加签和固件加密功能的开发人员,其他绝大部分开发人员是不需要了解可信加签和固件加密的底层原理,公司也不会随意开放这些代码权限给一般员工;原创 2023-06-10 12:19:35 · 1019 阅读 · 0 评论 -
tcpdump命令抓取网络数据包并用wireshark软件分析
(2)下载匹配的libpcap库和tcpdump库;(3)编译tcpdump命令依赖libpcap库,所以要先编译libpcap库再编译tcpdump命令;原创 2023-06-04 10:16:20 · 812 阅读 · 0 评论 -
RK3568芯片开发笔记——调试pwm控制红外功能
pwm功能调试5、设备树里pwm配置6、/proc/device-tree8、内核里各处pwm控制器信息的联系9、配置pwm功能步骤10、配置pwm11为例10.1、在设备树里开启pwm1110.3、通过sys文件系统来控制pwm11原创 2023-04-24 22:16:51 · 1947 阅读 · 1 评论 -
嵌入式开发——串口常见问题和调试手段
串口调试原创 2023-04-13 22:05:14 · 1209 阅读 · 0 评论 -
Nand flash发生位翻转问题定位(报错打印:sfc_nand_prog_page_raw ea80 cache bitflip)
(1)nand flash出现位翻转的可能原因有多种,比如:nand flash芯片本身工作不正常;参数配置不对,导致操作时序不对;硬件布线有问题,导致线路被干扰;(2)我遇到的这次出错是rk3568芯片适配SPI nand flash,分析步骤是我排查该问题的过程;原创 2023-04-02 20:41:29 · 2346 阅读 · 0 评论 -
C语言库编译时添加编译时间和svn版本号
(1)应用背景:当程序出错时,我们想要知道库的版本信息,这样有助于定位错误是哪个版本引入的,缩小排查的范围;就算程序没有出错,能知道库的版本,也方便知道程序的版本;(2)思路:在编译源码时,获取svn版本和编译时间并编译进源码,在库的初始化函数里将svn版本和编译时间打印出来;原创 2023-03-12 09:29:36 · 545 阅读 · 0 评论 -
uboot下实现U盘自动升级程序的思路分析(基于USB系统、eMMC系统、FAT32文件系统)
优点:在图形化界面操作,只需要选中升级文件并点击升级即可,操作简单;缺点:应用程序必须能正常启动,当程序出现bug就不能升级,可靠性差;总结:操作简单,适合用户;原创 2023-02-20 09:00:00 · 2522 阅读 · 0 评论 -
UART和RS232、RS485的联系和区别、以及对软件编程的影响
ARM芯片(S5PV210芯片)——串口通信详解》;(1)RS232是串口协议在电气层面的实现,RS-232标准接口定义了电压范围,规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15V;(2)Soc的串口引脚一般是3.3V或者5V的电压,所以Soc的串口引脚要使用RS232必须添加TTL电平转RS232电平的转换芯片;原创 2023-02-12 11:37:42 · 10289 阅读 · 5 评论 -
C语言静态库、动态库的封装和注意事项
C语言静态库、动态库的封装和注意事项原创 2023-02-11 22:48:10 · 792 阅读 · 0 评论 -
电脑任务栏软件图标变成白色图案的解决办法
Windows转载 2023-02-01 23:43:03 · 906 阅读 · 0 评论 -
终端串口“ctrl+C“失效问题的解决(/bin/sh: can‘t access tty; job control turned off)
(1)在内核的启动打印中,在进入串口前会打印出上面信息,显示进入控制台失败;(2)在串口终端中,在调用可执行程序或者ping命令时,“ctrl+C”失效,导致不能退出,只能重启设备;原创 2023-02-01 23:39:43 · 2245 阅读 · 0 评论 -
修改 bootargs 方式增加分区(mtd分区和blkdevparts分区)
在内核的平台代码中写死,然后在初始化NandFlash的时候设置。原创 2023-02-01 00:10:10 · 3046 阅读 · 3 评论 -
嵌入式linux系统快速启动优化的方法
(1)上电首先执行芯片内部固化的代码,这段代码会将BootLoader读取到芯片的iRAM中执行,初始化内存,并将BootLoader代码搬运到内存中继续运行;(2)BootLoader是启动引导代码,主要作用是将内核加载到内存中并启动。RAM架构的芯片是uboot,X86架构的芯片是BIOS。(3)内核会初始化外设,挂载根文件系统并执行启动脚本,脚本里会加载驱动并启动应用程序;原创 2023-01-31 22:40:12 · 3708 阅读 · 0 评论 -
uboot下识别FAT32格式的U盘报错:## Valid DOS partition found ##
(1)U盘被格式成FAT32文件系统,在Windows和Linux系统中都可以正常识别并挂载,在uboot下可以正常识别但是不能挂载;(2)在uboot下使用usb命令可以探测到U盘,但是用fatls、fatinfo等命令去挂载U盘时会失败,识别不了U盘上的FAT32文件系统;原创 2023-01-15 20:53:00 · 1350 阅读 · 0 评论 -
查看C语言文件依赖关系(用-Wp,MD参数生成.d文件)
(1)在编译c源文件时使用该参数,会生成对应C源文件的.d格式的文件,.d格式的文件内容是C源文件的依赖关系;(2)C源文件的依赖关系就是源文件调用了哪些头文件,可以方便我们确认工程中的同名头文件到底是引用的哪一份;(3)在大型项目中(比如内核),有很多同名头文件,可能放在了不同平台、不同产品类型的目录下,本次编译到底引用的哪个路径下的头文件,并不能很直观的看出来,这时候就可以通过-wp,-MD参数生成.d文件来看文件依赖关系;...原创 2022-08-25 22:41:54 · 1963 阅读 · 1 评论 -
修改网卡的映射关系(ip命令)
#!/bin/bash# 改脚本改变pcie 网卡的映射关系以满足应用要求,修改网卡名称来实现#修改网卡名称函数 usage: remame_netdev oldname newnamerename_netdev(){ if [ $# != 2 ]; then echo "usage: remame_netdev oldname newname" exit fi ifc原创 2021-10-27 23:00:47 · 1385 阅读 · 0 评论 -
uboot下tftp下载文件失败的排查步骤
(1)网线是否已经插上单板并连接正常;(2)可以先把网线插到其他设备上,确认网线是否可以正常工作;(3)确认单板与PC之间是否是网络直连;如果不是网络直连,则要先尝试去ping网关地址是否能ping通;(4)检测MAC地址是否冲突,或者直接将单板和PC直连,因为某些公司的网管会屏蔽掉非特定范围内的其他MAC地址或者IP地址,也可能导致单板无法访问网络;(5)检查uboot下网络相关的环境变量是否配置正常;(6)检查PC上tftp服务器是否正常工作;原创 2022-10-15 22:53:15 · 2211 阅读 · 0 评论 -
跨平台传输结构体的注意事项
(1)这里的平台是按照CPU的位数来划分,分为32位CPU和64位CPU,不同位数CPU的差异会影响到结构体的解析;(2)在实际嵌入式开发中,存在"主芯片+从芯片"的多CPU的产品,或者数据需要在不同位数CPU的机器上传输;(3)一般传输的数据包都会封装成结构体,如果结构体在跨平台上传输就需要消除CPU位数带来的影响,保证数据接收双方对结构体的解析都正确;原创 2022-09-09 22:10:32 · 412 阅读 · 0 评论 -
利用宏定义在编译阶段检查结构体大小的方法
/下面的结构体,在32位的机器中占12字节,在64位的机器中占16字节 typedef struct {char a;//占1字节 long long b;//占8字节 } testType;//结构体大小如果不是16字节就报错,也就是程序如果不在64位的机器上运行就报错 CHECK_SIZE_TYPE(testType , 16);原创 2022-09-09 22:02:21 · 1048 阅读 · 0 评论 -
如何快速确认代码是否被编译链接
(1)在大型项目中,通过编译选项可以编译成不同平台、不同分支的程序;(2)编译出来不同的程序,原因就是编译链接了不同的头文件和源代码;比如:工程中不同路径下存在多份同名文件;文件里通过宏定义有多个代码分支;...原创 2022-08-27 22:04:22 · 561 阅读 · 0 评论 -
png格式解码库移植过程详解
(1)zlib库源码下载网址:http://www.zlib.net/;(2)libpng库源码下载网址:ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/;(3)如果想直接要源码,可以私信我,源码和下面的移植过程是对应的;原创 2022-08-24 23:23:06 · 1495 阅读 · 10 评论 -
jpg解码库移植过程详解
(1)可以从网站下载:http://www.photopost.com/jpegsrc.v6b.tar.gz;(2)我下面的移植过程是根据jpegsrc.v6b.tar.gz版本的jpg解码库移植的,如果是其他版本的jpg解码库,配置编译过程可能会有所差异,需要自行解决,如果没什么特别的需求,v6b版本的jpg解码库完全是 够用的;(3)如果想直接要源码,可以私信我;原创 2022-08-24 23:20:37 · 747 阅读 · 0 评论 -
Ubuntu中报错:failed to create hard link
上面是我在编译jpg图片的解码库时遇到的报错,报错原因显示创建硬链接失败,不允许创建硬链接;原创 2022-08-21 21:24:15 · 1754 阅读 · 0 评论 -
实际工作开发中C语言工程的目录结构分析
目录存放内容bin存放产物的目录,产物可能是静态库、动态库、可执行程序build《静态库和动态库介绍以及Makefile》lib编译过程中依赖的动态库、静态库docs存放工程的设计文档、资料等,便于后续维护人员理解整个工程include存放头文件的目录inner一般是工程内部使用的头文件xxx1和xxx2代表存放需要和其他工程交互的头文件目录,一般是采用映射的方式保持同步patch存放补丁文件src存放源文件test存放工程的测试代码tool编译工程依赖的工具。...原创 2022-08-05 23:05:34 · 2622 阅读 · 0 评论