Lab6 Linux系统调用

实验连接示意图

所用器材列表

硬件

- 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代码,用两种方法做系统调用,测试

  1. 嵌入汇编代码
  2. 用syscall()函数


    编译并运行后执行dmesg | tail -5

6. 编写内核模块,在模块加载和卸载时能通过内核打印函数输出提示信息

内核模块:

7. 通过insmod和lsmod等命令测试内核模块

系统调用代码和修改内核的地方

1. 系统调用代码

2. 内核修改

  1. arch/arm/kernel/call.S
  2. include/uapi/asm-generic/unistd.h

测试用的代码和结果

1. 测试系统调用的用户代码


2. 测试内核模块:使用lsmod和dmesg | tail -5命令