自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1913)
  • 资源 (14)
  • 收藏
  • 关注

转载 WFE和WFI的区别

1. 概念:WFI(Wait for interrupt)和WFE(Wait for event)是两个让核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现。

2023-04-07 09:53:08 1690

转载 __raw_writel, writel_relaxed 和 writel的区别

write_relaxed: 在ARM平台上与__raw_writel一样,因为与__raw_writel相比,它只多做。一个DSB和L2的sync。内容在DMA开始之前都到memory里,所以开始DMA的指令(writel)里加了。对于ARM而言,当多个写以代码的顺序到达相同设备时,执行的顺序也是被保证的,不过。其实: writel也不能保证写的东西一定完成,它只能保证写的指令或写的内容。所以说: 只有在有DMA操作的代码里,writel才是必须的,其实它是一个。对于不同的设备,执行的顺序就不被保证了。

2023-04-03 21:27:22 1288

转载 rpmsg 内核开发 用户层接口

地址:https://blog.csdn.net/thisway_diy/article/details/129195479。Tina Linux E907开发指南。7.2 rpmsg 用户层接口。7.1 rpmsg 内核开发。

2023-04-03 21:16:59 996

转载 linux的uapi文件夹,【linux】Linux kernel uapi header file(用户态头文件)

例如:在A.h中inline function时发现里面用到的某些struct定义在B.h中,而B.h中又有inline function需要用到A.h中的struct,就会造成循环包含recursive include。转发自:http://vh21.github.io/linux/2014/11/21/linux-kernel-uapi-include-file.html。把userspace API的文件独立到 include/uapi跟arch/xxxx/include/uapi下,

2023-04-03 21:13:23 693

转载 虚拟机ubuntu20.04安装qemu跑Linux

sudo apt install aptitude -y //安装处理依赖关系更好的软件管理工具。本文一步一操作,在Ubuntu20.04下安装基本的qemu+linux5.0开发环境。3、补全常用的目录,具体直接ls /看看你当前ubuntu的,把常用的补全。/* (鉴于一切从零开始,这里也涉及到依赖库的情况)三、安装busybox制作根文件系统。二、安装qemu虚拟器。

2023-04-02 18:22:53 924

转载 Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统

通过NFS网络根文件系统,可以实现开发板在通过u-boot启动内核后,通过NFS网络在别的PC主机上挂载根文件系统。对于开发调试阶段的工作学习提供了很大的便利,可以直接在Linux主机上开发、编译驱动或者APP,并将目标文件拷贝到NFS服务目录中进行使用(此时文件相当于被拷贝到了开发板的根文件系统中)。》,已经实现了通过u-boot加载Kernel启动开发板,并且挂载根文件系统,本文讲述通过NFS网络挂载根文件系统。使用NFS网络文件系统时,需要Linux主机关闭系统防火墙,否则,系统在运行时会出现异常。

2023-04-02 17:30:16 383

转载 Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核

gcc标签(空格分隔): Qemu ARM Linux在上文《》中已经简单讲述了通过Qemu模拟直接启动Linux内核,并挂在SD卡根文件系统的方法,这种方法是直接启动内核,与实际应用中ARM板的启动方式:u-boot、kernel、rootfs有些不同。现在就来讲述下通过Qemu搭建通过u-boot启动Linux内核并挂载根文件系统的方法。

2023-04-02 17:25:55 732

转载 Qemu搭建ARM vexpress开发环境(一)

嵌入式软件开发依赖于嵌入式硬件设备,比如:开发板、外部模块设备等,但是如果只是想学习、研究Linux内核,想学习Linux内核的架构,工作模式,需要修改一些代码,重新编译并烧写到开发板中进行验证,这样未必有些复杂,并且为此专门购买各种开发版,浪费资金,开会演示效果还需要携带一大串的板子和电线,不胜其烦。然而Qemu的使用可以避免频繁在开发板上烧写版本,如果进行的调试工作与外设无关,仅仅是内核方面的调试,Qemu模拟ARM开发环境完全可以完美地胜任。目录下面简单介绍下我的Qemu开发环境搭建过程。

2023-04-02 17:24:17 606

转载 Linux内存管理之CMA简介

1.概述在过程中经常需要使用到连续大块物理内存,尤其是DMA设备。而实际在系统经过长时间的允许之后,物理内存会出现比较严重的碎片化现象,虽然通过内存规整,内存回收等手动可以清理出一段连续的物理内存,但是并不能保证一定能够申请较大连续物理块。最初连续申请较大块物理内存,一般都是只在DMA场景中使用,因此内核专门把物理内存划分出ZONE_DMA专门用于DMA内存申请(当然划分DMA_ZONE还有其他原因,在较早DMA中由于DMA寻址地址限制 只能将一定范围的物理内存),用于解决DMA申请连续物理内存问题。

2023-04-01 21:23:32 319

转载 dma_alloc_coherent的2种内存分配方式

rmem_dma_ops.device_init() = rmem_dma_device_init 将reserved-memory内存一致性建页表(memremap(MEMREMAP_WC))并绑定到dev->dma_mem中。dma_alloc_coherent(dev, GFP_ATOMIC) = pci_alloc_consistent 从预留的cma_pool分配,不可被中断。of_reserved_mem_device_init (要求reserved内存shared-dma-pool)

2023-04-01 21:07:17 712

转载 宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清

宋宝华,他有10几年的Linux开发经验。他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上review其他同事的代码。Barry Song是Linux的活跃开发者,是某些内核版本的最活跃开发者之一(如https://lwn.net/Articles/395961/ 、

2023-04-01 20:50:16 340

转载 dma_alloc_coherent 申请内存用法和问题总结

检查内核打印,给cma分配的地址是否在4G以上,dma_allocat_coherent() 要求地址低于掩码[(0x1 << 32)-1] = 0xFFFFFFFF。4M这个限制是本身应该是分的普通内存的限制, 例如把配置加一个CONFIG_FORCE_MAX_ZONEORDER=16把最大限制改成128M也能解决。使用这个接口最大只能申请到4M的内存,申请超过4M时,报。在dts中添加cma节点,可指定cma大小和空间。,dma分配默认会走cma,空间会大点。可配置大小,也可指定地址。

2023-04-01 19:22:00 3615

转载 makefile:make -C M=参数的使用

当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。KERNELRELEASE 是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。当make的目标为all时,-C。Makefile为,

2023-03-31 18:11:25 505

转载 virtio技术(3)virtqueue机制

virtio的关键技术是virtqueue机制,其提供了一套统一的用于virito前端和后端的通信机制。Descriptor Area:用于描述数据buffer;Driver Area:驱动需要传递给设备的额外数据;Device Area:设备需要传递给驱动的额外数据。最新的virtio协议版本定义有两种virtqueue格式:Split Virtqueue和Packed Virtqueue,下面针对这两种格式,我们分别进行描述。

2023-03-26 18:12:37 495

转载 virtio-net 实现机制

① virtio表示虚拟化IO,用于实现设备半虚拟化,即虚拟机中运行的操作系统需要加载特殊的驱动(e.g. virtio-net)且虚拟机知道自己是虚拟机相较于基于完全模拟的全虚拟化,基于virtio的半虚拟化可以提升设备访问性能② 运行在虚拟机中的部分称为前端驱动,负责对虚拟机提供统一的接口③ 运行在宿主机中的部分称为后端驱动,负责适配不同的物理硬件设备① 传统的网络收包流程完全靠中断驱动,当网络包到达十分频繁时,就会频繁触发中断,进而影响系统的整体性能。

2023-03-26 18:06:31 754

转载 virtio-net 实现机制【一】(图文并茂)

① virtio表示虚拟化IO,用于实现设备半虚拟化,即虚拟机中运行的操作系统需要加载特殊的驱动(e.g. virtio-net)且虚拟机知道自己是虚拟机相较于基于完全模拟的全虚拟化,基于virtio的半虚拟化可以提升设备访问性能② 运行在虚拟机中的部分称为前端驱动,负责对虚拟机提供统一的接口③ 运行在宿主机中的部分称为后端驱动,负责适配不同的物理硬件设备。

2023-03-26 18:03:17 299

转载 浅谈Linux设备虚拟化技术的演进之路

vDPA 的全称是 Virtio Data Path Acceleration,它表示一类设备:这类设备的数据面处理是严格遵循 Virtio 协议规范的,即驱动和设备会按照第三节提到的 Virtio 通信流程来进行通信,但控制路径,比如:通信流程里面提到的 ring buffer 和 deor table 的内存地址,驱动如何告知设备,设备支持的特性,驱动如何感知,这些都是厂商自定义的,不一定会遵循 Virtio 协议。在最早期阶段,设备虚拟化常常和机器模拟器技术,比如:QEMU,绑定在一起。

2023-03-26 17:47:21 294

转载 virtio 简介

virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率。在完全虚拟化的解决方案中,guest VM 要使用底层 host 资源,需要 Hypervisor 来截获所有的请求指令,然后模拟出这些指令的行为,这样势必会带来很多性能上的开销。

2023-03-26 15:51:41 311

转载 print_hex_dump用法

【代码】print_hex_dump用法。

2023-03-23 14:23:14 216

转载 Linux Kernel编程 --- Mailbox驱动框架

(1)driver 通过mbox_controller_register 注册controller;(2)client 通过mbox_request_channel调用driver->startup;(3)client 通过mbox_send_message调用driver->send_data,并等待txdone;(4)driver 收到remote的中断读取数据调用mbox_chan_received_data将数据放到 client->rx_buffer中;

2023-03-22 21:04:46 1295

转载 linux mailbox模型

irq读取寄存器得到消息,调用mailbox.c中的mbox_chan_received_data,再调用client的rx_callback将得到的数据放到client->rx_buffer中。driver 收到remote的中断读取数据调用mbox_chan_received_data将数据放到 client->rx_buffer中。client 通过mbox_send_message调用driver->send_data,并等待txdone。配置of_xlate回调,获取chan。

2023-03-22 19:01:26 435

转载 Linux ELF文件格式分析

ELF = Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf。其主要有三种主要类型:适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。适于执行的可执行文件(executable file),用于提供程序的进程映像,加载的内存执行。

2023-03-19 14:04:29 1175

转载 ELF文件格式简介 --- 见过最细致的ELF讲解

可重定位文件(relocatable):编译器和汇编器产生的.o文件,被Linker所处理可执行文件(executable):Linker对.o文件进行处理输出的文件,进程映像共享对象文件(shared object):动态库文件.so下面是三种类型的示例:ELF的布局如下:由图可以知道,ELF文件从概念上来说包括了5个部分:ELF header,描述体系结构和操作系统等基本信息,指出section header table和program header table在文件的位置。

2023-03-19 12:19:22 1104

转载 ELF 格式详解

可重定位的目标文件(Relocatable)也就是通常称的目标文件,后缀为.o可执行文件(Executable)共享库(Shared Object)共享文件:也就是通常称的库文件,后缀为.so注1: Linux中的readelf命令可以查看ELF文件的详细信息注2:ELF文件只能在操作系统环境下运行,裸机环境运行的是BIN文件;编译器默认输出的文件格式是ELF格式,可以使用objcopy命令转化为BIN文件:将name.elf转化为name.bin文件armbinary。

2023-03-19 12:06:32 5337

转载 git pull --rebase的正确使用

把本地发生改动的文件贮藏一下 $ git stash# 把远程最新的 commit 以变基的方式同步到本地# 把本地的 commit 推送到远程$ git push# 把本地贮藏的文件弹出,继续修改复制代码。

2023-02-02 14:07:49 5550

转载 git pull --rebase用法

git

2023-02-01 17:59:20 364

转载 shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符

then的意思是,如果shell传递到脚本的参数不等于1,则执行某命令。2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。1、在shell中进行比较时,结果为0代表真,为1代表假。-ge //greater equals大于等于。-gt //greater than 大于。-le //less equals小于等于。-ne //no equals不等于。-lt //less than小于。$#:是指传递到脚本的参数个数。-eq //equals等于。-ne:是指不等于则为真。

2023-02-01 10:18:38 3512

转载 shell脚本中$#、$*、$@、$?、$0-n等含义一次性搞明白!!!

3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号):Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)5、$@:表示执行脚本传入参数的所有个数(不包括$0):表示脚本执行的状态,0表示正常,其他表示错误。2、$*:表示执行脚本传入参数的列表(不包括$0)1、$#:表示执行脚本传入参数的个数。6、$0:表示执行的脚本名称。7、$1:表示第一个参数。8、$2:表示第二个参数。

2023-02-01 10:02:42 949

转载 AMBA学习(2) AXI

长期使用AHB总线,AXI甚至有些遗忘,最近复习下。

2023-01-09 18:51:14 220

转载 浅谈AXI总线

从接口的响应信号s_axi_bresp[1:0]用2‘b00表示数据信道的数据写入成功,即OKEY,从机接口发出的s_axi_bresp响应信号 的有效信号s_axi_bvaild为1时才表示响应有效。,准备写入数据,将待写入的数据置于s_axi_wdata总线上(s_axi_wstrb表示写入选通吸信号,默认为11,表示写入数据均可用),并将s_axi_wvalid置为有效(拉高),表示数据已经在信道上等待从机发出的写入响应信号,进而写入从接口。

2023-01-09 18:28:50 2526

转载 VSCode开发LINUX内核驱动——autoconf.h中宏定义不识别

即使在autoconfig.h中被定义的宏,在VSCode中也会被错误显示为未定义。新建一个临时文件tmp.h,将autoconf.h内容全部复制进去。将tmp.h中的注释删掉,选中。由于autoconfig.h没有被内核驱动直接引用,所以VSCode无法建立驱动代码和这些。1、在VSCode的c_cpp_properties.json中添加全局宏定义。Ctrl+shift+p打开C/C++编译配置(JSON)2、autoconf.h宏定义批量处理方法。将autoconfig.h中的宏定义由。

2023-01-06 09:57:39 882

转载 git fetch -p 获取远程仓库的新分支以及删除远程仓库已删除的分支

需求是我和同事合作开发一个项目。同事要新建一个分支,然后,我这边拉取这个分支即可。然而同事新建分支并且推送到远程仓库之后,我这边通过并不能看到这个分支。

2022-12-09 10:33:08 647

转载 Git 常用命令 --- git push命令

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master。如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名。如果远程分支被省略,则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,git push的其他命令。

2022-12-09 10:24:33 8867

转载 利用LinuxPTP进行时间同步(软/硬件时间戳)

因在 P2P 延时测量机制中,延时报文交互是在每条链路的两个端口间进行的,主钟只与直接相连的网络交换设备有延时报文交互,因此在 P2P TC 的延时测量机制中,没有对从钟数量的限制。E2ETC(End-to-End TransparentClock,端到端透明时钟):直接转发网络中非P2P(Peer-to-Peer,点到点)类型的协议报文,并参与计算整条链路的延时。嗯,-f -i -m -p -l -i -A -E -P -2 -4 -6 -H -S -L -q -v -h。

2022-10-10 14:39:54 4874 1

转载 PTP 时间同步原理

上图中提及的 PTP 报文详情请参考:PTP 报文格式_让代码更有趣的博客-CSDN博客_ptp报文格式。Sync 报文发送后,主时钟将发送 Follow_up 报文,包含精确时间 t1;主时钟会周期性发送 Sync 报文,并记录下报文离开主时钟的精确时间 t1;从时钟发送 Delay_Req 报文,并记录报文离开从时钟的精确时间 t3;随后,主时钟会发送包含 t4 时间的 Delay_Resp 报文给从时钟。主时钟会记录 Delay_Req 报文到达的精确时间 t4;

2022-10-10 14:33:00 2512

转载 PTP 报文格式

PTPv2。

2022-10-10 14:22:42 3433 1

转载 PTP时钟协议原理

周期性的发出sync报文,并记录下sync报文离开主时钟的精确发送时间t1;(由于sync报文不可能携带精确的报文离开时间,所以我们在之后的Follow_up报文中,将sync报文精确的发送时间戳t1封装起来,发给从时钟)offset:时钟间偏差(主从时钟之间存在时间偏差,偏离值就是offset,图1中主从时钟之间虚线连接时刻,就是两时钟时间一致点)2.通用报文:follow_up 报文,delay_resp报文。3.从时钟记录sync报文到达从时钟的精确时到达时间t2;

2022-10-10 13:54:30 820

转载 Linux虚拟化KVM-Qemu分析(十一)之virtqueue

汪汪汪,最近忙成狗了,一下子把我更新的节奏打乱了,草率的道个歉。前边系列将Virtio Device和Virtio Driver都已经讲完,本文将分析virtqueue;virtqueue用于前后端之间的数据交换,一看到这种数据队列,首先想到的就是ring-buffer,实际的实现会是怎么样的呢?

2022-08-25 16:22:22 529

转载 Linux RPMsg框架--以及应用于iMX6 SoloX连接A9和M4 Core

RPMsg(Remote Processor Messaging)是一种基于virtio的消息传递总线,允许内核驱动程序与系统上可用的远程处理器进行通信。如果需要,驱动程序可以暴露适当的用户空间接口。每个RPMsg设备都是与远程处理器的通信(因此RPMsg设备称为通道)。通道由文本名称标识,并具有本地(“source”)RPMsg地址和远程(“destination”)RPMsg地址。如下图所示,消息在端点之间通过双向无连接通信通道传递。iMX6 SoloX的Core 0是,而Core 1是。

2022-08-25 14:49:17 845 1

转载 virtio简介(二) —— virtio-balloon guest侧驱动

(1)内核会首先找到virito-pci.ko这个驱动模块,并依次加载virtio.ko,virtio-ring.ko和virtio_pci.ko (virtio_pci.ko依赖前两个模块)执行其模块初始化函数,其中,virtio.ko模块会在系统中注册一种新的总线类型virtio总线,virtio_pci的初始化函数会调用其注册的virtio_pci_probe函数;(2)virtio_pci_probe注册一个virtio设备(register_virtio_device);

2022-08-25 13:59:38 1525

2DVI-1DP-withoutVGA.bin

AMD 显卡E8860 配置固件,配置模式为:2DVI-1DP-withoutVGA AMD 显卡E8860 配置固件,配置模式为:2DVI-1DP-withoutVGA

2020-01-14

EEPROM.bin

Intel 82580网卡芯片个4电口配置固件 eeprom固件 Intel 82580网卡芯片个4电口配置固件 eeprom固件

2020-01-14

瑞萨65N CS+8.0 can flash自擦写代码

瑞萨65N CS+8.0 can flash自擦写代码,自擦写代码,自擦写代码!!!

2019-03-25

mfgtools-with-rootfs-sd-nr.zip

imc6ull mfgtools中ucl2.xml烧写配置文件,精简版,删除多余配置代码

2018-09-17

Rx65N系列 CS+4.1代码生成配置方案

瑞莎RX65N系列 CS+4.1代码生成配置方案,包括uart spi timer pwm产生、捕获等等

2018-09-17

NRSEC3000安全芯片技术资料

南瑞NRSEC3000安全芯片技术资料 测试随机数测试程序 示波器波形图

2018-05-08

ddr_stress_tester_v2.40

imx6系列DDR压力测试功能 ddr_stress_tester_v2.40 ddr-test-mx7d ddr-test-mx6ul ddr-test-mx6sx ddr-test-mx6sl ddr-test-mx6dl ddr-test-mx6dq

2018-05-08

IAC-335x-Kit资料

IAC-335x-Kit资料包括 测试程序 使用手册 原理图 IAC-335x-Kit 嵌入式开发板/评估板Linux开发环境等等

2018-04-20

NUC970_NuWriter

NUC970_NuWriter-master NUC970 uboot kernel rootfs 代码烧写工具

2018-04-20

Pins_Tool_for_i.MX_Processors_v4_x64.exe

Pins_Tool_for_i.MX_Processors_v4_x64 i.MX系列CPU引脚配置软件,自动生成配置代码

2018-04-20

i.MX6UL Development Database

本文总结i.MX6UL的开发经验总结 i.MX6UL 软件定制

2018-04-20

MX6X_ASOC_V4-20160129

i.MX6X ASOC 音频驱动说明与定制 文件用于帮助理解基于NXP的i.MX6X的ASOC立体声音频驱动

2018-04-20

penmount_linux_android_driver_src_v1_16_0

PenMount Device Driver for Linux This file contains information about the open source version of PenMount device driver for Linux.

2018-04-20

GT9xx_Driver_for_Android_V2.4_2014112801

GT9xx_Driver_for_Android触摸屏驱动源码 GT9XX for Android 驱动移植说明书

2018-04-20

空空如也

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

TA关注的人

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