embedded-linux相关内容

为 Raspberry Pi 构建一个最小的 Linux

现在我得到了我的树莓派.我是一名经验丰富的应用软件开发人员,但我以前从未做过硬件方面的工作或低级编程.我想构建一个最小的 Linux,包括我的 Pi 上所有硬件的驱动程序.出于学习目的,我不想在我的 Pi 上安装任何预构建的 Linux 发行版.我应该从哪里开始? 解决方案 您还可以查看 Buildroot,http://buildroot.org.我们为 Rasberry-Pi 设置了默 ..
发布时间:2022-01-05 10:37:23 其他开发

在Linux内核空间执行程序

如果我想在 Linux 内核空间中执行用户程序(而不是内核模块),我有哪些选择? 我已经看过 KML(内核模式 linux),但这是特定于 IA-32 架构的.我想要一个跨平台的解决方案,可以在嵌入式 linux 系统上工作. 解决方案 用户程序不在内核空间中执行 - 这就是使它们成为用户程序的原因. 如果您想在内核空间中执行代码,您有两个选择:将其构建到内核中,或者使用内核模 ..
发布时间:2022-01-04 22:51:55 其他开发

Linux下获取缓冲区的物理地址

我在 Xilinx 的 Microblaze 上使用完整的 MMU 运行 Linux 内核 3.3.我正在执行的任务要求我了解以下内容:我需要创建一个文本文件(缓冲区)并定位该缓冲区的物理地址,并且我不希望内核将此文件写入内存的不连续区域. 我需要这个的原因是因为我有一个 DMA 引擎,可以从预设的物理内存地址传输数据,所以我需要强制 Linux 在那个确切的内存位置创建缓冲区文件,这样当我 ..
发布时间:2022-01-04 22:49:12 其他开发

什么是 linux 中的链式 irq,它们什么时候需要使用?

什么是链式 IRQ?chained_irq_enter 和 chained_irq_exit 是做什么的,因为在中断发生后,IRQ 线被禁用,但是 chained_irq_enter 正在调用与屏蔽中断相关的函数.如果线路已经禁用为什么要屏蔽中断? 解决方案 什么是链式 irq ? 如何在父(中断控制器)设备的 IRQ 处理程序中调用子设备的中断处理程序有两种方法. 链式中 ..

什么是 linux irq 域,为什么需要它们?

什么是 irq 域,我阅读内核文档(https://www.kernel.org/doc/Documentation/IRQ-domain.txt) 他们说: 注册为唯一 irqchips 的中断控制器的数量呈现上升趋势:例如不同类型的子驱动程序例如 GPIO 控制器避免重新实现相同的回调通过对中断进行建模,将机制作为 IRQ 核心系统处理程序作为 irqchips,即实际上级联中断控制器. ..

如何将文件操作附加到平台驱动程序中的 sysfs 属性?

我为我们开发的外围设备编写了一个平台驱动程序,并希望向 sysfs 公开一些配置选项.我已经设法在探测函数中使用属性结构(见下文)和 sysfs_create_file 创建了适当的文件,但我不知道如何将显示/存储函数附加到平台中的结构司机. 我在网上找到的大多数资源都使用 device_attribute 结构或类似的东西来创建它们的文件,这在这里也合适吗?对于平台驱动程序,还有其他方法可 ..

如何将 dts Linux 设备树源文件编译为 dtb?

我有一个设备树文件 (.dts),我想为我的基于 powerpc 的电路板编译该文件. 如何在不基于 powerpc 的机器上执行此操作?我可以在我的 Ubuntu 系统上安装 DTC 吗?还是更像是使用单独的编译器并传递 ARCH 信息(如使用工具链)? 解决方案 设备树不需要使用“架构感知"工具进行编译.你的 ubuntu 机器上的 dtc 编译器可能是最新的,足以编译你的设备树 ..

内核头文件是否取决于处理器类型、供应商等?

我已经从 kernel.org 下载了 Linux 内核的源代码并通过调用创建了头文件 make ARCH=arm headers_check 我有一个嵌入式平台,我问自己这是否足够,因为我没有供应商提供的头文件.头文件的依赖是什么?在我看来,头文件是特定于硬件的,我希望它们取决于 CPU 类型等.仅通过 ARCH=arm 指定架构就足够了吗?arm系统的供应商是否有可能为Linux内核创建自 ..
发布时间:2022-01-04 22:36:13 其他开发

如何获取使用 insmod 插入的内核模块的地址?

我想知道内核模块的地址.实际上,从堆栈跟踪来看,崩溃是由内核模块触发的(在系统启动后已被插入).我手动插入了几个模块.所以我需要检测其中哪个模块触发了崩溃.请让我知道如何获取使用 insmod 加载的每个模块的地址. 解决方案 cat/proc/modules 应该为您提供有关加载内容的粗略指南.通过查看 /proc/kallsyms,您可能会获得更多有关内核崩溃的确切位置的线索. ..

如何在 Linux 内核模块中设置周期性定时器回调

我正在开发一个 Linux 内核模块,该模块为来自定制板的中断注册回调,并将接收到的数据放入字符设备接口后面的队列中,以供应用程序处理.该模块即使没有来自板卡的中断,也需要不断监测和测量来自板卡的中断和数据,所以它又有一个按时间触发的回调. 当前实现使用 RTC 中断作为恒定定时器源.我禁用内核 RTC 驱动程序 (CONFIG_RTC_DRV_CMOS) 并请求 IRQ 8 并将计时器回调 ..

当我们使用 irq_set_chained_handler 时,irq 行是否会被禁用?

当我们使用 irq_set_chained_handler 时,当我们为相关的处理程序提供服务时,irq 行不会被禁用,就像 request_irq 一样. 解决方案 中断是如何设置的并不重要.当发生任何中断时,在中断处理程序期间将禁用所有中断(对于该 CPU).例如,在 ARM 架构上,在 C 代码中找到中断处理的第一个位置是 asm_do_IRQ() 函数(在 arch/arm/ker ..

insmod 错误:插入“./hello.ko":-1 无效的模块格式"

我刚刚制作了我的第一个驱动程序模块,即 LDD3 之后的 hello world 模块.不过很不幸遇到了这个错误: insmod: error inserting './hello.ko': -1 无效的模块格式. 我在 Ubuntu 11.04 和我的环境上执行此操作: $ uname -r2.6.38-8-通用 我像这样得到内核源代码: sudo apt-cache search l ..

内核函数 asm_do_IRQ() 中的 irq 与我在模块中请求的不同

我用 cortex-A9 开发板做了一些实验.我使用 gpio_to_irq() 来获取 irq num,我请求了 irq 并用它编写了一个小驱动程序,它在 syslog 中是 196.我在 asm_do_IRQ 中添加了一些印刷品.当我触发 gpio 中断时,驱动程序工作正常,但 asm_do_IRQ 中的 irq num 为 62 .我无法理解.为什么 irq 编号与我请求的不同?驱动程序如下 ..

/proc/iomem 的内容

1) 是否可以访问/proc/iomem 中未定义的物理地址? 2) 如果/proc/iomem 中没有出现设备的物理地址范围,是否表示该设备还没有被使用/初始化? 解决方案 1) 是否可以访问/proc/iomem 中未定义的物理地址? 是的. 假设内存映射所有直接连接的外围设备的 ARM 处理器,驱动程序可以执行 ioremap() 操作将物理内存映射到虚拟内存以供访 ..

'/dev' 中的文件如何与 Linux 的设备型号匹配?

这是我对打开文件进行读/写的理解. 在应用层,我可以调用fopen()函数. fwrite() 函数将调用系统调用 open(). 操作系统收到open()调用后,会将命令传递给VFS(虚拟文件系统). VFS 查找文件名,包括所需的任何目录并进行必要的访问检查. 如果这是在 RAM 缓存中,则不需要访问磁盘.如果没有,VFS 会向特定文件系统(可能是 EXT4)发送 ..
发布时间:2022-01-04 22:07:47 其他开发

使用 LOADADDR 构建内核 uImage

在构建内核时,我将 LOADADDR 指定为“0x80008000": 使uImage LOADADDR=0x80008000 你能帮忙理解一下这个有什么用吗?LOADADDR可以改吗,LOADADDR的长度有限制吗? 解决方案 (根据 U-Boot 的提及和 LOADADDR 的值,我假设您正在使用 ARM.) 你能帮忙理解一下这个有什么用吗? LOADADDR 指定链接 ..
发布时间:2022-01-04 22:07:39 其他开发

request_mem_region() 实际做什么以及何时需要?

我正在研究编写嵌入式 linux 驱动程序,并决定触发一些 GPIO 以确保我理解这本书 (LDD3, chap9.4.1) 正确. 我能够按预期控制正确的 GPIO 引脚(使其高低,我用万用表探测);但是,我测试了两段代码,一段带有 request_mem_region(),另一段没有.我期待没有的会失败,但两者都工作得很好. 带有request_mem_region的代码: if ..
发布时间:2022-01-04 22:04:47 其他开发