embedded-linux相关内容
现在我得到了我的树莓派.我是一名经验丰富的应用软件开发人员,但我以前从未做过硬件方面的工作或低级编程.我想构建一个最小的 Linux,包括我的 Pi 上所有硬件的驱动程序.出于学习目的,我不想在我的 Pi 上安装任何预构建的 Linux 发行版.我应该从哪里开始? 解决方案 您还可以查看 Buildroot,http://buildroot.org.我们为 Rasberry-Pi 设置了默
..
我正在尝试在 linux shell 中运行一个可执行文件(树莓派上的 OpenELEC) OpenELEC:~ #/storage/fingi/usr/lib/autossh/autossh-sh:/storage/fingi/usr/lib/autossh/autossh:未找到 这种情况下的“未找到"是什么意思? 如果我尝试做 ldd: OpenELEC:~ # ldd/stor
..
如果我想在 Linux 内核空间中执行用户程序(而不是内核模块),我有哪些选择? 我已经看过 KML(内核模式 linux),但这是特定于 IA-32 架构的.我想要一个跨平台的解决方案,可以在嵌入式 linux 系统上工作. 解决方案 用户程序不在内核空间中执行 - 这就是使它们成为用户程序的原因. 如果您想在内核空间中执行代码,您有两个选择:将其构建到内核中,或者使用内核模
..
我在 Xilinx 的 Microblaze 上使用完整的 MMU 运行 Linux 内核 3.3.我正在执行的任务要求我了解以下内容:我需要创建一个文本文件(缓冲区)并定位该缓冲区的物理地址,并且我不希望内核将此文件写入内存的不连续区域. 我需要这个的原因是因为我有一个 DMA 引擎,可以从预设的物理内存地址传输数据,所以我需要强制 Linux 在那个确切的内存位置创建缓冲区文件,这样当我
..
什么是链式 IRQ?chained_irq_enter 和 chained_irq_exit 是做什么的,因为在中断发生后,IRQ 线被禁用,但是 chained_irq_enter 正在调用与屏蔽中断相关的函数.如果线路已经禁用为什么要屏蔽中断? 解决方案 什么是链式 irq ? 如何在父(中断控制器)设备的 IRQ 处理程序中调用子设备的中断处理程序有两种方法. 链式中
..
什么是 irq 域,我阅读内核文档(https://www.kernel.org/doc/Documentation/IRQ-domain.txt) 他们说: 注册为唯一 irqchips 的中断控制器的数量呈现上升趋势:例如不同类型的子驱动程序例如 GPIO 控制器避免重新实现相同的回调通过对中断进行建模,将机制作为 IRQ 核心系统处理程序作为 irqchips,即实际上级联中断控制器.
..
我为我们开发的外围设备编写了一个平台驱动程序,并希望向 sysfs 公开一些配置选项.我已经设法在探测函数中使用属性结构(见下文)和 sysfs_create_file 创建了适当的文件,但我不知道如何将显示/存储函数附加到平台中的结构司机. 我在网上找到的大多数资源都使用 device_attribute 结构或类似的东西来创建它们的文件,这在这里也合适吗?对于平台驱动程序,还有其他方法可
..
我已经为板子 defconfig 完成了 make menuconfig 并修改了一些配置.当我选择保存时,在内核顶级目录中创建了一个新的 .config. 我想为这个创建的 .config 文件创建新的 defconfig. 我可以将 .config 复制为新的 defconfig 并复制到 arch/arm/configs/ 吗? $ cp .config arch/arm/co
..
我有一个设备树文件 (.dts),我想为我的基于 powerpc 的电路板编译该文件. 如何在不基于 powerpc 的机器上执行此操作?我可以在我的 Ubuntu 系统上安装 DTC 吗?还是更像是使用单独的编译器并传递 ARCH 信息(如使用工具链)? 解决方案 设备树不需要使用“架构感知"工具进行编译.你的 ubuntu 机器上的 dtc 编译器可能是最新的,足以编译你的设备树
..
我已经从 kernel.org 下载了 Linux 内核的源代码并通过调用创建了头文件 make ARCH=arm headers_check 我有一个嵌入式平台,我问自己这是否足够,因为我没有供应商提供的头文件.头文件的依赖是什么?在我看来,头文件是特定于硬件的,我希望它们取决于 CPU 类型等.仅通过 ARCH=arm 指定架构就足够了吗?arm系统的供应商是否有可能为Linux内核创建自
..
我想知道内核模块的地址.实际上,从堆栈跟踪来看,崩溃是由内核模块触发的(在系统启动后已被插入).我手动插入了几个模块.所以我需要检测其中哪个模块触发了崩溃.请让我知道如何获取使用 insmod 加载的每个模块的地址. 解决方案 cat/proc/modules 应该为您提供有关加载内容的粗略指南.通过查看 /proc/kallsyms,您可能会获得更多有关内核崩溃的确切位置的线索.
..
我试图了解 linux 内核中的 init 进程,它是第一个进程,并使用 INIT_TASK 宏静态初始化. 161 #define INIT_TASK(tsk) \第162话第163话第164话第165话第166话167 .prio = MAX_PRIO-20,\168 .static_prio = MAX_PRIO-20,\169 .normal_prio = MAX_PRIO-20,\1
..
我正在开发一个 Linux 内核模块,该模块为来自定制板的中断注册回调,并将接收到的数据放入字符设备接口后面的队列中,以供应用程序处理.该模块即使没有来自板卡的中断,也需要不断监测和测量来自板卡的中断和数据,所以它又有一个按时间触发的回调. 当前实现使用 RTC 中断作为恒定定时器源.我禁用内核 RTC 驱动程序 (CONFIG_RTC_DRV_CMOS) 并请求 IRQ 8 并将计时器回调
..
当我们使用 irq_set_chained_handler 时,当我们为相关的处理程序提供服务时,irq 行不会被禁用,就像 request_irq 一样. 解决方案 中断是如何设置的并不重要.当发生任何中断时,在中断处理程序期间将禁用所有中断(对于该 CPU).例如,在 ARM 架构上,在 C 代码中找到中断处理的第一个位置是 asm_do_IRQ() 函数(在 arch/arm/ker
..
我刚刚制作了我的第一个驱动程序模块,即 LDD3 之后的 hello world 模块.不过很不幸遇到了这个错误: insmod: error inserting './hello.ko': -1 无效的模块格式. 我在 Ubuntu 11.04 和我的环境上执行此操作: $ uname -r2.6.38-8-通用 我像这样得到内核源代码: sudo apt-cache search l
..
我用 cortex-A9 开发板做了一些实验.我使用 gpio_to_irq() 来获取 irq num,我请求了 irq 并用它编写了一个小驱动程序,它在 syslog 中是 196.我在 asm_do_IRQ 中添加了一些印刷品.当我触发 gpio 中断时,驱动程序工作正常,但 asm_do_IRQ 中的 irq num 为 62 .我无法理解.为什么 irq 编号与我请求的不同?驱动程序如下
..
1) 是否可以访问/proc/iomem 中未定义的物理地址? 2) 如果/proc/iomem 中没有出现设备的物理地址范围,是否表示该设备还没有被使用/初始化? 解决方案 1) 是否可以访问/proc/iomem 中未定义的物理地址? 是的. 假设内存映射所有直接连接的外围设备的 ARM 处理器,驱动程序可以执行 ioremap() 操作将物理内存映射到虚拟内存以供访
..
这是我对打开文件进行读/写的理解. 在应用层,我可以调用fopen()函数. fwrite() 函数将调用系统调用 open(). 操作系统收到open()调用后,会将命令传递给VFS(虚拟文件系统). VFS 查找文件名,包括所需的任何目录并进行必要的访问检查. 如果这是在 RAM 缓存中,则不需要访问磁盘.如果没有,VFS 会向特定文件系统(可能是 EXT4)发送
..
在构建内核时,我将 LOADADDR 指定为“0x80008000": 使uImage LOADADDR=0x80008000 你能帮忙理解一下这个有什么用吗?LOADADDR可以改吗,LOADADDR的长度有限制吗? 解决方案 (根据 U-Boot 的提及和 LOADADDR 的值,我假设您正在使用 ARM.) 你能帮忙理解一下这个有什么用吗? LOADADDR 指定链接
..
我正在研究编写嵌入式 linux 驱动程序,并决定触发一些 GPIO 以确保我理解这本书 (LDD3, chap9.4.1) 正确. 我能够按预期控制正确的 GPIO 引脚(使其高低,我用万用表探测);但是,我测试了两段代码,一段带有 request_mem_region(),另一段没有.我期待没有的会失败,但两者都工作得很好. 带有request_mem_region的代码: if
..