我有一台Epson打印机,我打算将其拆开以重用其硬件,为此,我需要访问其GPIO线。现在的问题是,打印机使用的片上系统(SoC)根本没有(至少就我的研究而言)文档。该打印机运行Linux内核2.6.35.8-arm1,并具有包含Cortex-A9 ARM CPU(ARMv7l)的REALOID SoC。我已经成功地找到了一个串行控制台并查看了整个启动过程。然后,我取下了串行闪存并转储了整个二进制文件,并用Binwalk对其进行了扫描,并能够将Cramfs文件系统解压缩并将其安装在笔记本电脑上。然后,我修改了启动脚本,以将我放入一个根shell中,使我可以访问整个嵌入式系统。现在出现另一个问题,执行 find / -name'gpio'或 find / -name'led'不会产生任何结果, / sys / class / gpio 在这台机器上不存在,这使我相信内核是在没有GPIO支持的情况下编译的。这台打印机上的指示灯可以工作并且闪烁。这让我很困惑,坦率地说,我不知道从这里去哪里。
我知道GPIO是高度特定于硬件的,但是在最低层次上,我们只是在谈论寄存器的切换和翻转,因此,如果我反编译内核或反编译我在设备中找到的可用内核模块,我可以弄清楚我要使用的寄存器的名称,然后以某种方式操纵它们?还是尝试重新编译整个内核(我已经用Buildroot完成了,但是无法使其在设备上启动)还是编译内核模块以增加GPIO支持会更好?还是应该尝试用devmem操纵内存?在Linux系统中是否有任何软件工具可以扫描GPIO?
值得一提的是,我可以在文件系统中添加/编辑文件,甚至可以编译自己的静态Busybox,然后将其复制到设备中,并可以使用最初不存在的工具。意思是我可以根据需要添加工具,模块,文件。
内核是用LZMA压缩的uImage,我目前正在尝试弄清楚如何交叉编译模块和修改vermagic,以便它们可以加载到运行的内核中。我可以提供必要的任何其他信息,但是我确实需要经验丰富的人提供的类似经验的指导。