Articles of embedded式linux

如何使用QEMU学习ARM Linux内核开发?

我想学习它像开发一些设备驱动程序等,并使用QEMU这一点,因为我没有ARM的硬件板如beagle板。 你们有什么build议? 我可以使用Qemu模拟器学习ARM内核上的Linux内核吗? 或者我应该尝试的其他选项?

在busybox sh中,不能递增填充8的数字

这是我用来保存照相机文件的代码,并从0001开始命名。 相机正在运行Busybox,并且里面有一个灰壳。 代码是基于查尔斯·达菲在此之前的回答。 #!/bin/sh # Snapshot script cd /mnt/0/foto sleep 1 set — *.jpg # put the sorted list of picture namefiles on argv ( the number of files on the list can be requested by echo $# ) while [ $# -gt 1 ]; do # as long as there's more than one… shift […]

如何在arago项目中编写自己的配方包

如何在arago项目中编写自己的食谱包? 我知道一点,它可以是bitbake文件。 但我怎么写,不知道。 我在互联网上search,但没有find任何好的来源开始。 有人可以提供我的链接或例子开始? 问候 Linux学习者。

Linux设备驱动程序,用于embedded式系统中的RS232设备

我最近开始学习为我正在开发的特定项目编写Linux设备驱动程序。 以前我所做的大部分工作都是在没有操作系统的设备上进行的,所以Linux的驱动程序和开发对我而言是一个新的东西。 对于我正在开发的项目,我有一个运行基于Linux操作系统的embedded式系统。 我有一个外部设备通过RS232控制,我需要写一个驱动程序。 问题: 1)有没有办法从内核空间访问串行端口(并可能使用serial.h,serial_core.h等),这通常是如何做的,任何好的例子? 2)从我发现,似乎只要打开dev / ttyS *并写入它将更容易访问用户空间中的串行端口。 当为这样的设备(RS232设备)编写驱动程序时,最好是在用户空间中执行还是可以编写内核模块? 如何决定在用户​​空间中将驱动程序编写为内核模块,还是反之亦然? 驱动程序仅适用于通用设备,如UART /串口,然后在上面是用户空间,还是应该将此驱动程序编写为内核模块? 我感谢帮助,我一直无法find许多信息来回答我的问题。

embedded式Linux poll()不断返回

我有一个特殊的问题。 当我知道没有什么可读的时候,民意调查不断。 所以设置如下,我有2个文件描述符,它们构成轮询手表的fd集的一部分。 一个是针对高到低的变化(GPIO)。 另一个是代理input。 代理input出现问题。 处理的顺序是:启动主要function; 它会然后投票; 将数据写入代理; 投票将打破; 接受数据; 通过SPI发送数据; 接收从设备,通过降低GPIO低来发送要发送的信号; 民意调查()意识到这个下降和反应; 无限POLLINs 🙁 如果我没有超时的投票function,程序运作完美。 在调查中包含暂停的那一刻。 民意调查不断返回。 不知道我在这里做错了什么。 while(1) { memset((void*)fdset, 0, sizeof(fdset)); fdset[0].fd = gpio_fd; fdset[0].events = POLLPRI; // POLLPRI – There is urgent data to read fdset[1].fd = proxy_rx; fdset[1].events = POLLIN; // POLLIN – There is data to read rc […]

读取串口块不明原因

我正试图在Linux下使用termios框架来通过UART(usbserial)接口非接触式智能卡读卡器。 这个代码可以在PC上正常工作,但是当我在ARM9目标上交叉编译并试用时,它能够打开设备甚至将命令写入设备,但是读取命令无限期地被阻塞。 这里是代码片段: int mifare_rdr_init(struct mifare_1K * ptr, char *rdr_devnode) { bzero(ptr, sizeof(struct mifare_1K)); // zero the entire structure // open serial device int fd = open(rdr_devnode, O_RDWR|O_NOCTTY ); if (fd == -1) { perror("Failed to open serial device "); return 1; } ptr->serialfd = fd; // save file descriptor ptr->serialdev.c_iflag = 0; // no […]

是什么时候在ISR计划之后运行tasklet?

我写了我的ISR,我的tasklet立即运行。 但是 ,我看到有人说tasklet只有在CPU受到关注时才运行。 这是一个非常通用的术语CPU注意,所以我背诵这些响应者。 我的意思是在哪个时刻CPU注意到tasklet的执行和CPU状态发生了什么? 其次,如果假设我继续进行硬中断,那么tasklet有机会运行的时候呢? tasklet可能没有机会运行吗? 内核如何处理这些事情?

如何在启动过程后切换linux内核控制台?

在我的embedded式系统上,我通常使用/ dev / ttyS0作为主控制台。 这是通过传递内核参数console=/dev/ttyS0 ,当init接受它的一部分时, getty将在例如inittab指定的同一个设备上被触发。 ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 。 有没有可能改变这些设置而不重新启动,并切换到另一个terminal如ttyS1 , ttyUSBx甚至一些伪tty?

如何在linux中知道特定引脚的中断/ GPIO编号

我正在做一个项目,我需要在Linux中处理一个中断。 我使用的主板是基于三星s3c6410 MCU的ARM9Board(arm 11处理器),它具有以下I / O接口: 如图所示,我有EINTx引脚的外部中断和GPxx引脚作为GPIO引脚,我不介意使用其中任何一个,但我没有他们的号码! 对于EINTx引脚: 当我打电话 int request_irq(unsigned int irq, void (*handler)(int, struct pt_regs *), unsigned long flags, const char *device); 我需要中断号作为函数的第一个parameter passing它,所以如何获得irq号码,例如EINT16引脚? 对于GPxx引脚:同样的故事,我需要GPIO引脚编号将它传递给这些function int gpio_request(unsigned gpio, const char *label); int gpio_direction_input(unsigned gpio); int gpio_to_irq(unsigned gpio); 即我如何知道GPP8引脚的GPIO号码? 我search了董事会的文件和数据表,但它不包含任何关于如何获得这些数字,任何想法或帮助在哪里看?

从内核空间closures(embedded)Linux

我正在为基于ARM9的平台Olinuxino开发2.6.35内核的修改版本。 我正在尝试修改电源pipe理驱动程序(体系结构特定部分)。 处理器是飞思卡尔i.MX23。 该处理器有一个称为PSWITCH的“特殊”引脚,触发一个由电源pipe理驱动程序处理的中断。 如果按下开关,则系统进入待机状态。 这是通过调用pm_suspend(PM_SUSPEND_STANDBY)在驱动程序中完成的。 鉴于我的硬件设置,我想,而是closures系统。 所以我的问题是: 内核空间进程触发一个干净的系统停止/关机的首选方式是什么? 我想这里有一个很好的小函数,但是到目前为止我找不到它。 我的内核代码(我正在使用的文件是arch / arm / mach-mx23 / pm.c)可以在这里find: github.com/spairal/linux-for-lobster ,虽然我的问题需要一个通用的Linux内核做法。