实验连接示意图
所用器材列表
硬件
- Raspberry Pi2板一块
- 5V/1A电源一个
- microUSB线一根
- PC一台
软件
- 内核源码
实验步骤
1. 寻找、下载Linux实验版本所用的Linux内核源码
2. 在内核中加入新的系统调用,输出调试信息
a) 在arch/arm/kernel下新建一个sys_mysyscall.c文件,内容如下
b) 修改Makefile,增加sys_mysyscall.o到obj-y末尾
c) 修改arch/arm/kernel/call.S中的223号调用
d) 修改include/uapi/asm-generic/unistd.h中的223号调用
3. 修改内核代码配置,编译内核
a) 输入配置命令
KERNEL=kernel7
make ARCH =arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
b) 输入编译命令
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
4. 将编译好的内核装载到板卡启动
5. 编写C代码,用两种方法做系统调用,测试
- 嵌入汇编代码
- 用syscall()函数
编译并运行后执行dmesg | tail -5
6. 编写内核模块,在模块加载和卸载时能通过内核打印函数输出提示信息
内核模块:
7. 通过insmod和lsmod等命令测试内核模块
系统调用代码和修改内核的地方
1. 系统调用代码
2. 内核修改
- arch/arm/kernel/call.S
- include/uapi/asm-generic/unistd.h