自定义博客皮肤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)
  • 收藏
  • 关注

原创 六、uboot通过tftp的方式加载内核和设备树

console=ttymxc0,115200表示内核启动时,把 启动 log 和终端输出 打到 ttymxc0 这个串口设备上,波特率是 115200。一般来说,默认的tftp文件夹在**/srv/tftp**,可以自己进行设置,就在**/etc/default/tftpd-hpa**。这里在主机端通过网络命令查取他的IP地址,然后再开发板的uboot上设置服务器的IP地址。把主机 /srv/tftp/zImage 下载到内存地址 0x80800000。这里设置开发板的IP地址,要和你的主机在同一网段。

2025-04-17 10:58:42 559

原创 三、问题分析(二)Linux文件系统中的 inode 与 fd 总结笔记

fd是进程打开文件后获得的引用编号,用于后续 read / write / ioctl 操作。进程私有:每个进程有自己的 fd 表,从 0 开始编号(标准输入/输出/错误是 0/1/2)。通过 struct file 结构连接到 inode。inode文件在文件系统中的真实身份,表示一个文件或目录的本体。存储了文件的元信息(元数据):权限、大小、时间戳、文件类型。数据块指针(即文件内容在磁盘上的位置)。

2025-03-31 17:14:47 345

原创 五、Linux设备驱动程序调用关系,用户态内核态分析

strace 是一个在用户态运行的命令行工具,用于跟踪和记录一个程序执行过程中发生的所有系统调用。它会拦截程序调用的每一个 open、read、write、ioctl 等系统调用,并显示调用参数、返回值、错误码等详细信息。它不需要修改程序源码,是排查问题、了解程序行为的首选利器。查看程序有没有成功访问设备文件:比如你写了 /dev/mychardev 驱动,用户程序运行后你不确定有没有执行 open(),用 strace 一看就知道。

2025-03-31 12:00:54 659

原创 四、NFS共享文件夹配置,开发板和虚拟机共享文件夹

注:这里的192.168.202.199是ubuntu的IP地址。/home/xxx是ubuntu上创建的nfs共享目录(这个目录要和之前在ubuntu上创建的一致)。确保你的虚拟机系统为 Ubuntu(或 Debian 系发行版),并且与开发板在同一个局域网内。注:chmod 777 是为了测试方便,实际使用可根据需要收紧权限。2、开发板的 Linux 系统中可以访问这个目录,实现文件互通。1、件(如可执行程序、配置文件)放在虚拟机的共享目录中。3、NFS 仅用于文件传输,不用于挂载根文件系统。

2025-03-26 15:06:31 298

原创 三、问题分析(一)variable ‘XXX’ has initializer but incomplete type

以上述这个结构体为例,正确的应该是file_operations,但是我们写成了file_operation,这样就会导致这个编译错误。(2)另外一种情况是,你初始化某个头文件中定义的结构,此时如果你的初始化的时候将头文件中定义的结构拼写错误也会导致这个报错。(1)当你自己定义一个结构时,使用的时候没有申明就对他进行了初始化,编译器找不到定义他的具体类型,会报错。

2025-03-26 10:20:35 303

原创 二、Linux内核移植及根文件系统制作

根文件系统(Root Filesystem, Rootfs是计算机操作系统中最基本的文件系统,它包含了操作系统运行所需的所有关键文件。在Linux和类Unix系统中,根文件系统是整个目录结构的起点,位于 /(根目录)。

2025-03-24 18:23:29 859

原创 三、RSA 签名与验签的完整过程

用私钥对数据签名(默认使用 SHA256)首先会将你的原始数据进行一次Hash计算,SHA-256 是一种压缩函数,其核心结构叫 Merkle–Damgård 构造 + 位运算 + 模加。意思是任意长度的二进制输入,被压缩为一个固定的 256 位输出。

2025-03-21 14:10:19 1128

原创 一、uboot分析(四)——uboot移植

在这个文件夹地下有很多板级的头文件,同样我们找到nxp定义的头文件,然后复制为自己板子的头文件,具体操作如下:打开这个文件发现,这个文件都是进行判断一些宏,然后进行宏的定义以及宏的注释,这就和我们在阅读uboot源码的时候对应上了,这个文件的具体作用是裁剪uboot的相关功能,如果需要开启某个功能就打开这个宏,如果不需要就删除或者注释相关的宏。同样的套路,去这个头文件中进行修改(在这个文件的14行包含了一个头文件mx6_common.h。

2025-03-18 16:10:45 599

原创 二、TF-A代码构建

ATF(ARM Trusted Firmware)是由ARM开发并开源的一套可信固件框架,主要用于支持基于ARM架构的处理器,尤其是ARMv8-A架构的启动、安全管理和系统运行时环境。ATF 的核心功能是提供一个可信的启动环境(Trusted Boot),通过分阶段加载系统固件,实现安全启动链的建立,同时利用硬件隔离技术(如 TrustZone)创建安全世界(Secure World)和非安全世界(Non-Secure World)。

2025-03-04 16:39:54 1024

原创 一、FVP环境搭建

在芯片设计和嵌入式系统开发中,FVP 是指 ARM Fast Models 提供的 Fast Virtual Prototype,一种软件模拟平台,可以在没有实际硬件的情况下运行和调试软件。

2025-03-04 15:38:43 319

原创 数据结构(二)树的遍历方式

在实际使用中,深度优先遍历(如前序、中序、后序遍历)可以用栈实现非递归版本,广度优先遍历可以用队列实现非递归版本。使用队列实现:首先将根节点入队,依次出队访问,同时将其子节点入队。前序遍历结果:A → B → D → E → C。访问顺序:根节点—>左子树—>右子树。访问顺序:左子树—>根节点—>右子树。访问顺序:左子树—>右子树—>根节点。访问顺序:按层次从左到右访问节点。

2024-12-09 14:39:08 229

原创 数据结构(一)常见的树型结构

(注:里提到的二叉树是二叉树中的一些特殊结构,对于普通的二叉树这里不做介绍)

2024-12-09 14:29:12 128

原创 一、uboot分析(三)——uboot内部程序流程分析

但是 board_init_f 并没有初始化所有的外设,还需要做一些后续工作,这些后续工作就是由函数 board_init_r 来完成的,board_init_r 函数定义在文件 common/board_r.c中,这里不再对代码深究。函数 board_init_f_alloc_reserve 主要是留出早期的 malloc 内存区域和 gd 内存区域。接下来,跳转到board_init_f_alloc_reserve这个函数执行,这个函数定义在:/common/init/board_init.c。

2024-12-03 16:44:54 741

原创 一、uboot分析(二)——链接脚本分析及程序入口地址确定

rel_dyn_start 和 .rel.dyn 定义了动态重定位表的起始位置和内容,支持动态链接与加载,而 .rel_dyn_end 则标志其结束位置,确保链接器和加载器能够正确解析动态符号;.bss_start、.bss 和 .bss_end 定义了未初始化数据的存储范围,用于未初始化的全局和静态变量,运行时会自动清零;最后,.ARM.exidx 和 .gnu.linkonce.armexidx 提供 ARM 异常处理的索引表,用于定位异常处理程序,确保异常处理的可靠性。

2024-12-03 10:08:08 409

原创 一、uboot分析(一)——uboot简介及顶层Makefile分析

U-Boot 是一个用于基于 PowerPC、ARM、MIPS 和其他几种处理器的嵌入式板子的引导加载程序。它可以安装在引导 ROM 中,用于初始化和测试硬件,或者下载并运行应用程序代码。/arch 架构特定文件/arc ARC 架构通用文件/arm ARM 架构通用文件/avr32 AVR32 架构通用文件/blackfin Analog Devices Blackfin 架构通用文件/m68k m68k 架构通用文件/microblaze microblaze 架构通用文件。

2024-12-02 18:04:03 1043

原创 (C语言版)Leetcode 编写一个函数来查找字符串数组中的最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

2022-10-14 09:13:28 311

原创 C++清除输入缓冲区的方法

C++在cin读入数据错误时,清空缓冲区的方法

2022-07-05 21:16:03 3268

原创 ARM时钟体系(ARM9)及编程

ARM时钟体系(ARM9)首先要明确一点,在编写带有时序性质的程序时,如果没有思路可以先了解其工作时的时序图,这一点是非常重要的。一个时序图能够清楚的描述其运行的整个过程,弄懂时序图会对编程思路有着明显的提升。本次学习使用的开发板为:JZ2440ARM版本为:AMR9一、时钟框架概述1.框架结构在讲解如何通过程序改变芯片的运行时钟频率之前,先搞清楚ARM9时钟框架,如下图所示为S3C2440芯片手册上关于时钟框架的框架图。通过观察上述的框架图可以发现,整个SOC被划分成了三部分,可以总结为:C

2021-11-25 01:05:01 1527

原创 【Windows】miniconda安装以及环境配置

Miniconda的安装主要分为以下的几个方面:Miniconda是一款小巧的python环境管理工具,安装包大约只有50M多点,其安装程序中包含conda软件包管理器和Python。一旦安装了Miniconda,就可以使用conda命令安装任何其他软件工具包并创建环境等。通俗的理解:Miniconda是一个环境管理工具,可以在其中安装用户所需要的软件包,并且各个软件包之间没有影响。一、Miniconda的下载Miniconda如果直接从国外的网站进行下载,下载的比较慢。可以选择清华大学开源镜像站m

2021-09-15 12:13:33 8594

空空如也

空空如也

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

TA关注的人

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