- 博客(1059)
- 收藏
- 关注
原创 基础概念 | DDR的几个概念
答:CPU与内存之间的接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。生产商把64bit集合称为一个物理BANK(Physical BANK),简写为P-BANK。为了和逻辑BANK相区分,也经常把P-BANK称为RANK或Physical RANK,把L-BANK则简称为BANK。
2024-07-22 13:53:11
221
原创 底软驱动 | U-boot驱动模型
id = UCLASS_SERIAL, //设置对应的uclass id,并且存放在.u_boot_list_2_uclass_2_serial段中.id = UCLASS_SERIAL, // 这里的uclass_id和 uclass_driver中的一致.of_match = s5p_serial_ids, // 设备树种的compatible属性{ .compatible = "samsung,exynos4210-uart" }, //注意这里的compatible要和设备树中的一致。
2024-07-21 16:14:03
859
原创 底软驱动 | U-boot编译与配置过程
u-boot从v2014.10版本后引入kBuild系统,使得其Makefile变的更加复杂;整个Makefile中,嵌套其他不同用途的Makefile,本文将进行简单的分析.
2024-07-21 16:02:19
549
原创 底软驱动 | U-boot管脚复用
需要配置寄存器:pad控制器,Mux控制器,select input寄存器和Data寄存器配置IOMUX的必备工具:1.芯片原理图;2.芯片软件手册;3.内核源代码GPIO1_IO02代表GPIO1组寄存器的第02个寄存器,也就是第3位设置ALT5: 101模式。
2024-07-21 15:58:12
305
原创 底软驱动 | U-boot启动内核
FDT(flattened device tree)**的一种实现机制,它使用一定语法和格式把需要的镜像(如kernel,dtb等)组合到一起生成一个image文件。a) **its(image source file)文件:**类似于dts,负责描述image的信息,需要自行构造。b) **itb文件: **最终得到的image文件,类似于dtb文件,u-boot直接对其识别和解析。c) **mkimage:**负责dtc的角色,通过解析its生成itb。长度较大,需要额外信息较长。实现简单,长度较小;
2024-07-21 15:43:00
519
原创 底软驱动 | uboot 与 代码重定位
重定位:把代码搬移到你想要的地址,本来程序是运行在运行地址处的,你可以通过重定位搬移到链接地址处。链接地址: 编译器对代码中的变量名、函数名等东西进行一个地址的编排,赋予这些抽象的东西一个地址,然后在程序中访问这些变量名、函数名就是在访问一些地址,这些地址我们称之为编译地址。运行地址:是指程序指令真正运行的地址,是由用户指定的,用户将运行地址烧录到哪里,也就是PC当前执行指令所在的实际地址,就是运行的地址。也就是真实在程序中运行的地址。由我们程序员自己定义,段的属性和特征也由我们自己定义。
2024-07-21 15:33:29
733
原创 读书记 | 《李光耀观天下》
李光耀(Lee Kuan Yew,1923年09月16日-2015年03月23日),新加坡华人,祖籍广东省梅州市大埔县高陂镇党溪乡,毕业于新加坡莱佛士学院,曾任新加坡总理(开国元首)、新加坡最高领导人,被誉为“新加坡国父”,新加坡人民行动党创始人之一,改革友谊奖章获得者。2015年03月23日凌晨3时18分,李光耀因病医治无效去世,享年91岁。Hi!早!今天推荐的书:《李光耀观天下》我对于李光耀不算是了解,起码在看这本书之前我只知晓曾为新加坡领导人。
2024-07-21 09:05:32
272
原创 ARM/Linux嵌入式面经(十八):TP-Link联洲
sizeof:是一个关键字,是编译时运算符,用于判断变量或数据类型的字节大小。其值在编译时就已计算好,可以接收数组、指针、类型、对象、函数等作为参数。strlen:是一个函数,用于计算字符串的长度,直到遇到第一个空字符(‘\0’)为止,但不包括该空字符。它必须在运行时才能计算,且参数必须是字符型指针(char*)。sizeof是编译时运算符,计算的是数据类型或变量所占的内存空间大小,与变量实际存储的内容无关。strlen。
2024-07-21 09:02:54
745
原创 ARM/Linux嵌入式面经(十七):美团校招面经
有逻辑,金字塔原理。哪个项目?为什么?是因为让你学到了什么?升华一下!可以有虚析构函数,用于正确管理通过基类指针删除的派生类对象。构造函数不能是虚的,因为构造时对象的类型已知,且虚函数机制在构造期间不可用。没有直接称为delete函数的C++特性,但析构函数在对象销毁时自动调用,可以视为类似功能。
2024-07-21 09:02:34
135
原创 科技改变生活,一文搞懂SIM卡
从名字就能看出来需要订阅功能:对移动用户进行身份验证,防止非法用户进入网络。(1)身份认证(2)存储相关信息SIM卡的基本工作原理(1)SIM卡插入检测原理I/O 双向数据端口CLK 时钟信号,3.25MHzRST 热复位信号VCC 工作电压1.8V或3VVPP 编程输入电压USIM_Persence:卡检测引脚SIM卡的USIM_Presence通过电阻上拉到电源,未插卡是,该引脚一定是高电平。
2024-07-19 14:20:46
809
原创 芯片基础 | verilog基础学习(一)
创建一个具有一个输入和一个输出的模块,其行为类似于导线。与物理导线不同,Verilog中的导线(和其他信号)是有方向的。这意味着信息只能从一个方向流动,即从(通常是一个)源到汇(源也常被称为将值驱动到导线上的驱动器)。在Verilog的“连续赋值”(assign left_side = right_side;)中,右侧信号的值被驱动到左侧的导线上。该赋值是“连续的”,因为即使右侧的值发生变化,赋值也会一直持续。连续赋值不是一个一次性事件。模块上的端口也有方向(通常是输入或输出)。
2024-07-18 20:53:44
870
原创 芯片基础 | `wire`类型引发的学习
类型用于表示硬件中的物理连线,它可以传输任何类型的值(如0、1、高阻态z等),但它在任何给定的时间点上只能有一个确定的值。则用于在过程块中存储临时值,尽管其名称可能让人误解为寄存器,但实际上它在硬件实现中可能并不对应物理寄存器。是Verilog中用于表示硬件中物理连接的一种基本数据类型,它在连续赋值和模块端口等场景中发挥着重要作用。代表线网,它是物理连接的抽象,用于在模块之间或模块内部传递信号。是两种基本的数据类型,它们代表了硬件中的两种不同类型的存储元素。类型的,除非显式地声明为其他类型(如。
2024-07-18 19:33:21
355
原创 芯片基础 | Verilog仿真平台及数字逻辑仿真(上)
被测试器件DUT是一个二选一多路器,测试程序(testbench)Testbench使用,DUT采下面将给出Testbench的描述、DUT的描述及如何进行混合仿真(行为级+门级)
2024-07-18 11:08:27
439
原创 芯片基础 | Verilog结构级描述和操作符(上)
描述中忽略了门的实例名,并且同一种门的所有实例可以在一个语句中实例化;它没有使用任何内部信号;基本单元是Verilog开发库的一部分,大多数ASIC和FPGA元件库是用这些基本单元开发的,基本单元库是自下而上设计方法的一部分;基本单元引脚的数目由连接到门上的net的数量决定,因此当基本单元输入或输出的数量变化时用户不需要重定义一个新的逻辑功能;在说明实例数组时,实例必须有一个名字(包括基本单元实例)。Verilog基本单元提供基本的逻辑功能,也就是说这些逻辑功能是预定义的,用户不需要再定义这些基本功能;
2024-07-18 11:07:50
425
原创 一文看懂JTAG基本知识
JTAG可以控制芯片的每个引脚,图3中,我们可以通过JTAG使得所有的CPU引脚发送数据,而所有的FPGA引脚接收数据,然后根据FPGA中是否收到准确的数据来判断所有的芯片连接是否正常。每个IR寄存器都有一定的长度,我们假设CPU的IR寄存器是5位,FPGA的寄存器是10位,那么通过TDI和TDO的信号线连接方式,CPU和FPGA的IR寄存器其实是串联的,如图10所示。在此指令下,每个芯片的DR寄存器会延时一个时钟周期,那么我们发送一个数据后,检查延时多少周期收到数据,即可知道JTAG链上芯片的数量。
2024-07-17 22:54:11
105
原创 安卓基础 | AOSP 架构与内核
Android 开放系统平台 (AOSP) 是公开发布且可修改的 Android 源代码。任何人都可以下载并修改其设备的 AOSP。AOSP 提供 Android 移动平台的完整且功能完备的实现。注意:AOSP 无法为需要后端服务的应用(例如云消息传递或高级位置信息服务应用)提供支持。此外,AOSP 并没有包含特定类型的设备可能需要的一整套最终用户应用。
2024-07-16 14:42:28
1065
原创 ARM/Linux嵌入式面经(十六):蔚来嵌入式一二三面面经
进程(Process):进程是系统进行资源分配和调度的独立单元,是程序的一次执行过程。它拥有独立的内存空间、文件描述符和资源,可以被操作系统独立地分配和管理。线程(Thread):线程是进程内的一个执行单元,是处理器任务调度和执行的基本单位。线程共享进程的资源,包括内存、文件描述符等,但每个线程都有自己独立的运行栈和程序计数器。
2024-07-15 22:28:53
669
原创 底软驱动 | 一文搞定Linux虚拟内存
在概念上来讲,虚拟内存被组织为由存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有唯一的虚拟地址,作为到数组的索引(现在我们知道了虚拟内存虽然叫做内存,但其实它并不在内存中,而是磁盘中的一块空间)。虚拟内存与物理内存之间构成了一个缓存系统。虚拟内存位于较低层,物理内存位于较高层。虚拟内存上的数据可以被缓存到主存中。VM系统将虚拟内存分割为称为虚拟页(Virtual Page)的大小固定的块,每个虚拟页的大小为P=pow(2,p)字节。
2024-07-14 21:45:26
576
原创 底软驱动 | Linux虚拟内存管理,MMU机制,原来如此
现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持。首先引入 PA 和 VA 两个概念。
2024-07-14 21:38:08
767
原创 面试真题 | 说说TCP为什么需要三次握手和四次挥手?
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备过程如下:上述每一次握手的作用如下:通过三次握手,就能确定双方的接收和发送能力是正常的。之后就可以正常通信了如果是两次握手,发送端可以确定自己发送的信息能对方能收到,也能确定对方发的包自己能收到,但接收端只能确定对方发的包自己能收到 无法确定自己发的包对方能收到并且两次握手的话, 客户端有可能因为
2024-07-14 21:33:09
754
原创 通信协议 | 三次握手、七次握手、四次挥手
客户端想要通过 HTTP 请求访问服务端时,需要经过三次握手;通过 HTTPS 访问服务端时,需要额外增加四次握手。TCP 协议需要通过三次握手建立可靠连接。想要建立 HTTPS 安全连接,需要在 TCP 可靠连接基础上使用 TLS 协议。TLS 协议需要四次握手才能建立安全连接。终止 TCP 可靠连接时需要四次挥手。需要注意的是,本文所说的三次握手、七次握手、四次挥手都是基于特定版本的协议,不同版本的协议所需握手次数可能不同。
2024-07-14 21:25:49
952
原创 底软驱动 | 块设备文件与文件系统的关系
Linux操作系统秉承“一切皆文件”的设计思想,将所有的设备页看作文件来进行处理。目前的Linux版本中,当内核发现一个块设备时,用户空间会利用udev这一数据结构以及相关的操作来为块设备创建其所需的块设备文件。关于块设备文件,可以从两方面来进行理解。从块设备文件的外部表现来看,它是属于某个外部文件系统上的一个文件。通常Linux内核将其存放在/dev目录下,用户像对常规文件一样来对其进行访问。
2024-07-14 20:49:54
828
原创 底软驱动 | 字符设备基础
/fops结构体dev_t dev;//设备号(包含主设备号和次设备号);dev_t类型:typedef u_long dev_t;cdev_alloccdev_initcdev_addcdev_del(2)设备号:主设备号+次设备号MKDEV:由一个主设备号和次设备号算出设备号MAJOR:从设备号提取主设备号MINOR:从设备号提取次设备号代码示例:新的接口注册字符设备驱动需要两步(定义一个全局cdev结构体)│├── 模块安装函数xxx。
2024-07-14 20:49:42
898
原创 ARM/Linux嵌入式面经(十五):中科曙光
Linux内核空间与用户空间之间的通信方式多种多样,每种方式都有其特定的应用场景和优缺点。在实际应用中,需要根据具体需求选择最合适的通信方式。以上信息主要基于Linux系统的通用特性和广泛认可的通信机制,并参考了相关权威网站和文档。这里啰嗦讲讲NetLink,因为之前面试确实追问了我这个知识点。Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接口的方式提供内核与用户空间的双向数据通信;
2024-07-13 18:49:40
228
原创 底软驱动 | Linux字符设备驱动开发基础
/fops结构体dev_t dev;//设备号(包含主设备号和次设备号);dev_t类型:typedef u_long dev_t;cdev_alloccdev_initcdev_addcdev_del(2)设备号:主设备号+次设备号MKDEV:由一个主设备号和次设备号算出设备号MAJOR:从设备号提取主设备号MINOR:从设备号提取次设备号代码示例:新的接口注册字符设备驱动需要两步(定义一个全局cdev结构体)│├── 模块安装函数xxx。
2024-07-13 18:14:21
716
原创 面试真题 | 内存泄漏的原因,内存泄漏如何避免?内存泄漏如何定位?
内存溢出 OOM (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个int,但给它存了long才能存下的数,那就是内存溢出。
2024-07-13 17:56:58
799
原创 面试真题 | 算法k-means聚类
聚类是一种无监督的学习, 它将相似的对象归到一个簇中, 将不相似对象归到不同簇中.相似这一概念取决于所选择的相似度计算方法.K-Means 是发现给定数据集的 K 个簇的聚类算法, 之所以称之为K-均值是因为它可以发现 K 个不同的簇, 且每个簇的中心采用簇中所含值的均值计算而成.簇个数 K 是用户指定的, 每一个簇通过其质心(centroid), 即簇中所有点的中心来描述.聚类与分类算法的最大区别在于, 分类的目标类别已知, 而聚类的目标类别是未知的.
2024-07-13 17:53:07
763
原创 底软驱动 | U-boot移植点点滴滴
本文介绍了U-boot的结构和使用方法。其中使用方法包括了代码下载,开发,编译,烧录uboot镜像,以及通过uboot更新内核镜像。本文介绍的U-boot包括了uboot-spl和uboot两部分。SPL是介于芯片内部rom程序与uboot之间的一个BootLoader,其主要功能为初始化ddr,系统管理器,时钟,以及加载uboot。SPL程序本身需要加载到系统内部ram中运行,是一个轻量级的uboot。在U-boot开源程序中,本身是包含SPL选项的。
2024-07-13 11:37:57
568
原创 通信协议 | 一文玩转UART协议就够了
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种双向、串行、异步的通信总线,仅用一根数据接收线和一根数据发送线就能实现全双工通信。
2024-07-13 11:03:43
656
原创 底软驱动 | 进程间通信之共享内存和信号量
共享内存和信号量是有着相似性有可以共同使用从而完成进程通信的手段。下面引用极客时间中的两幅图来总结二者的整个过程。
2024-07-13 09:18:46
771
原创 底软驱动 | Linux进程间通信——使用共享内存
共享内存就是允许两个不相关的进程访问同一个逻辑内存。不同进程之间共享的内存通常安排为同一段物理内存。,就好像它们是由用C语言函数malloc分配的内存一样。而。。所以我们通常需要用其他的机制来同步对共享内存的访问,例如前面说到的信号量。
2024-07-13 09:17:16
770
原创 底软驱动 | Linux用户空间与内核空间通信(Netlink通信机制)
我们看一下内核代码的逻辑,收到用户消息后,根据消息中的pid发送回去,而pid为0,内核并不认为这是用户程序,认为是自身,所有又将回发的10个消息发给了自己(内核),这样就陷入了一个死循环,而用户态这时候进程一直处于D。下面分析这三处设置pid分别有什么作用,首先A和B位置的比较好理解,这是在地址(sockaddr_nl)上进行的设置,就是相当于设置源地址和目的地址(其实是端口),只是注意B处设置pid为0,0就代表是内核,可以理解为内核专用的pid,那么用户进程就不能用0做为自己的pid吗?
2024-07-13 09:12:09
817
原创 底软驱动 | linux内核空间和用户空间如何通信?
Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。那么Netlink有什么优势呢?一般来说用户空间和内核空间的通信方式有三种:/proc、ioctl、Netlink。而前两种都是单向的,但是Netlink可以实现双工通信。
2024-07-12 22:46:27
819
原创 面试项目 | 带你玩转大学生智能汽车项目
本书适合有一些嵌入式入门基础的学习者阅读。希望阅读完本小书,能够解答大家这些问题硬件布线最基本的准则不带RTOS的嵌入式系统如何更好地开发嵌入式软件的分层设计怎么做在设计控制器时,被控系统的简化动态模型怎么获得传统的PID控制器设计在工程上到底怎么实施,如何仿真测试和写代码Matlab/Simulink怎么可以帮助提高嵌入式控制器的开发和测试效率如何简单快速地做嵌入式控制器故障分析和错误排查,等等。
2024-07-12 22:34:41
1155
原创 【Soc级系统防御】PCB安全威胁与防御策略:攻击模型与实践指南
本文档深入探讨了印刷电路板(PCB)面临的安全挑战,包括硬件木马、现场修改、盗版和反向工程等攻击方式,并提供了相应的攻击模型、案例研究、实验操作及练习题,旨在提升对PCB安全威胁的认识和防范能力。
2024-07-12 22:33:55
140
原创 底软驱动 | 用户空间和内核空间通讯
假如,你向内核发送了一个消息需要获取内核中某些信息,比如路由表,或其他信息,如果路由表过于庞大,那么内核在通过Netlink向你返回数据时,你可以好生琢磨一下如何接收这些数据的问题,毕竟你已经看到了那个输出队列了,不能视而不见啊。消息序列号一般和NLM_F_ACK类型的消息联合使用,如果用户的应用程序需要保证其发送的每条消息都成功被内核收到的话,那么它发送消息时需要用户程序自己设置序号,内核收到该消息后对提取其中的序列号,然后在发送给用户程序回应消息里设置同样的序列号。有点类似于TCP的响应和确认机制。
2024-07-12 14:01:03
614
TRACE32工具的SiFive RISC-V调试和跟踪方案
2024-03-11
ChatGPT芯片算力:研究框架
2024-03-11
TEE and its Key Management:
2024-03-11
on-chip networks:片上网络(On-chip Networks)
2024-03-11
A new IoT Security certification scheme with trust signals
2023-09-02
TCG Guidance for Secure of Software and Firmware on Embedded Sys
2023-08-20
Scalable Private Membership Test Using Trusted Hardware
2023-08-20
A TC Architecture of Embedded System Based on Improved TPM
2023-08-20
Technical Background of the Android Suspend Blockers Controversy
2023-02-22
DEN0021D-Trusted-Base-System-Architecture-Client
2023-01-02
DEN0022E-Power-State-Coordination-Interface-BETA
2023-01-02
DEN0056E-System-Control-and-Management-Interface-v3.2-BETA
2023-01-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人