为树莓派2添加系统调用
Veröffentlicht am
主要参考了Stack Overflow上的这个问题和这篇博文。后者只是在arch/arm/kernel/calls.S
中添加了一行CALL()
,个人感觉这样就够了,而前者为了整个系统完整性还在一些头文件中添加了一些声明。
需要注意的一点是,最后用syscall()
调用时,系统调用号为arch/arm/kernel/calls.S
中新添加的CALL()
的序号,如果有在arch/arm/include/uapi/asm/unistd.h
中添加#define
的话,也是相对于__NR_SYSCALL_BASE
的偏移量,而不是include/uapi/asm-generic/unistd.h
中用#define
定义的序号(我很怀疑修改该文件的必要性)。
还有一点,添加的系统调用的实现不要写在已有的.c
文件中,而要新建一个文件,然后在Makefile
的obj-y
中添加一个对应.o
文件,这样可大大减少重编译的时间,因为没有文件依赖新的.o
文件,之后修改也方便。
更新树莓派2的内核
Veröffentlicht am
我用的是树莓派2,不过对树莓派3应该也适用。
主要参考了树莓派官网上的这篇文档和这篇博文,前者没有提及更新firmware
,后者没有提及用scripts/mkknlimg
生成img
文件,两者结合一下即可。
我是在PC上交叉编译的,速度会快一些。
步骤略,详见上文两个链接。
main()之前做点什么
Veröffentlicht am
1 | #include <iostream> |
Module windrvr6 is not loaded. Please reinstall the cable drivers. See Answer Record 22648.
Veröffentlicht am
之前写在别的地方,现在原文搬过来。