自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 tinyriscv启动代码分析

以一个period打头的命令是assembler directives,他们是对汇编器的命令,而不是汇编器需要翻译的命令。Figure 3.9是RISC-V assembler的directives。汇编器出于自己的喜好,做了一些骚操作,导致结果不符合预期。编译器这样做的原因已经超出了笔者的认知范围,笔者暂时无法回答。但从反汇编结果来看,加上准没错。笔者尝试去掉norelax的选项,然后进行反汇编分析。发现去掉会导致结果异常,函数的反汇编,帮助分析启动代码。,在上面的表格都有相应的描述。

2024-06-13 14:27:20 160

原创 linux kernel占多大磁盘空间

Linux 内核镜像的大小可以根据具体配置和用途大不相同。通常情况下,桌面或服务器的内核镜像大小在 5-15 MB 之间,而针对嵌入式设备的内核镜像可能更小,约 1-5 MB。通过配置和编译选项,可以进一步优化和调整内核镜像的大小以适应特定需求。

2024-05-29 17:38:54 339

原创 如何查看ubuntu linux kernel的链接地址

【代码】如何查看ubuntu linux kernel的链接地址。

2024-05-29 14:19:10 110

原创 设备树 Devicetree入门

说设备树是这里的hardware包括CPU 或 CPUs,memory(内存),buses(总线),integrated peripherals(集成外设)等。注意: 这里的数据结构和C中的数据结构不是一回事设备树是一种描述硬件配置的树形数据结构。通常由Node和Property组成。设备树主要用于嵌入式系统中,通过DTS,DTB来描述硬件配置。这些信息在内核引导时由内核解析,以初始化和管理硬件设备。而C中的数据结构是程序中用来组织和存储数据的一种方式。常见的数据结构有数据,结构体,链表,树等。

2024-05-28 17:15:29 459

原创 PCI协议了解

笔者之前学习了PCIe协议,最近在学习AHCI协议,了解到HBA实现了AHCI协议,而HBA是一种PCI设备。作为一名存储固件开发工程师,有必要对PCI协议做一个了解。下面这篇博客是对PCI接口协议的概括描述,是很好的入门资料。

2024-05-22 16:50:28 109 1

原创 C多线程编程之mutex

在C语言的多线程编程中,POSIX线程(pthread)库是一个强大的工具,提供了丰富的功能用于线程管理和同步。pthread库的头文件是pthread.h,它包含了创建和管理线程以及线程间同步的所有函数和数据类型定义。通过包含pthread.h头文件,可以使用POSIX线程库提供的各种功能来实现多线程程序。互斥锁是一个重要的同步工具,用于确保多线程环境下对共享资源的安全访问。理解和正确使用这些功能是编写高效、安全的多线程程序的关键。

2024-05-22 15:37:10 444

原创 MD5计算

Windows命令行。

2024-05-18 22:08:27 62

原创 PCIe优秀博客汇总

以下内容均转载自其他创作者。

2024-05-10 15:43:54 156

原创 PCIe速率计算 GT/s 到 MB/s如何计算

RK3566 CPU支持PCIe2.1 x1,所以支持的SSD速度一定小于500MB/s。虽然跑不满,但是对于需求不高的用户完全够用了。笔者的主机至今仍然使用的是三星850pro,一款MLC SSD作为系统盘使用,已经稳定工作了将近10年。问题:以2.0为例,Transfer rate per lane是5.0GT/s,throughput的500MB/s是如何算出来的?对一个pcie2.0 x1的主板,SSD的极限速率是500MB/s。

2024-05-10 11:11:13 734

原创 STM32F429-Discovery 编译 u-boot uclinux

笔者在参考时遇到了一个问题,在此做一个记录。笔者在编译uclinux的uboot的时候遇到了重定义符号的问题,看起来是项目本身的头文件和操作系统提供的头文件冲突了。笔者在网上找到了Workaround,亲测可用。

2024-05-08 08:23:47 439

原创 目标文件格式浅析

笔者只对目标文件的格式做了一个概述,至于细节需要在以后遇到问题的时候去细究。弄懂了目标文件的结构,就可以大胆去阅读工程的链接脚本了。

2024-05-07 18:19:37 529

原创 make和Makefile必知必会

笔者目前只对赋值操作符和内建函数做了总结,他们两个是看懂Makefile的基础,非常重要。至于其他概念,如目标和依赖,编译,链接,打包等步骤需要开发者对编译原理有一个比较好的理解才能正真理解透彻。笔者在这方面还需要补习。

2024-05-06 17:44:49 2094

原创 shell命令之read

笔者在开发过程中经常遇到shell脚本的交互逻辑中让用户选择y or n。这背后是如何做到的呢?命令用于从标准输入读取用户输入,并将其保存到一个或多个变量中。举个例子,如果我们想要从用户输入中读取一个名称,并将其存储到变量。,然后输入他们的姓名,按下回车键确认。输入的姓名将存储在变量。我们现在来实现一个让用户输入y n的交互应用。则是要存储用户输入的变量名称。下面有请read命令闪亮登场!这样,用户会看到提示信息。"请输入您的姓名:"

2024-05-06 15:22:00 154

原创 理解Shell脚本中的变量作用域

笔者在阅读项目编译框架的时候,对shell脚本的变量范围比较疑惑。为什么在一个shell函数中定义的变量,在主逻辑的下一个函数中也能被看到?难道shell脚本中就不存在局部变量吗?带着这个疑问,笔者查阅了其他博客,并且做了一些实验来验证和理解。在Shell脚本编程中,理解变量的作用域对于编写健壮且易维护的脚本至关重要。Shell脚本中的变量可以具有不同的作用域,决定了它们可以被访问和修改的范围。

2024-05-06 14:39:46 445

原创 UART,SPI,异步和同步傻傻分不清楚?

在异步通信中,数据的传输不依赖于共享的时钟信号。发送方和接收方之间没有共享时钟信号,而是使用预先约定的数据传输速率(波特率)来同步数据的传输。- 在同步通信中,数据的传输是通过共享的时钟信号进行同步的。在异步通信中,数据的传输不依赖于外部时钟信号,而是通过发送和接收方之间的波特率来同步。在同步通信中,数据的传输依赖于共享的时钟信号,该信号用于同步数据的传输。- SPI(串行外围接口)是一种典型的同步通信协议,其中主设备(通常是微控制器)生成时钟信号,并使用此时钟信号来同步数据的传输。

2024-05-06 07:43:26 364

原创 TODO list

1. FreeRTOS RISC-V 汇编代码分析。2. uboot架构分析。

2024-05-05 22:44:50 76

原创 u-boot入口 _start函数学习

u-boot一个嵌入式裸机程序,一般被当作OS的bootloader来使用。因为u-boot本身对底层硬件操作的便利性,也常常被用来在OS之下对各个嵌入式硬件模块进行测试。因此学会u-boot对一名嵌入式工程师来说是非常重要的。当今快速发展的社会,竞争激烈。对笔者来说,掌握u-boot是面对不确定时,信心和底气的来源。

2024-04-29 14:49:52 1545

原创 tiny riscv 启动代码start.S学习

tinyriscv启动代码学习

2024-04-26 08:02:18 153 1

原创 linux扩展任意分区,步骤简单,易于理解,亲测好用!

这让笔者感到非常不安,因为笔者开发过程中需要使用较多的工具,基本都安装在/usr/bin,/usr/local/bin下。如果对此问题不管不顾,势必有一天会导致没有足够的空间安装新的软件。笔者通过查阅国内外方法,发现大多都非常复杂,并且鲜有其他开发者复现,所以笔者不敢轻易尝试,毕竟数据无价!红色表示原来的/usr目录,绿色表示当前的/usr目录,并且软件都能正常使用,完全满足笔者的需求。首先,在你的虚拟机软件中拓展磁盘空间,这一步网上教程很多,笔者不再赘述。:首先,你需要创建一个用于挂载新分区的目录。

2024-04-17 18:33:39 1476 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除