树莓派上为内核添加系统调用

made by Rk

本文由浙江大学《嵌入式系统》课程提供强力支持。

感谢翁恺老师 @翁恺BA5AG

/*************************************************************/

参见《为Ubuntu Linux 3.6.8添加系统调用》:http://blog.csdn.net/rk2900/article/details/8281335

以及《树莓派搭建交叉编译环境》:http://blog.csdn.net/rk2900/article/details/8738442

1、下载内核源代码

mkdir kernel cd kernel git clone https://github.com/raspberrypi/linux.git git clone https://github.com/raspberrypi/firmware.git

由于clone速度太慢…最终我下载了gzip包解压。

2、连接树莓派,获取config文件

sudo zcat /proc/config.gz > .config

scp pi@222.205.48.188:/home/pi/kernel/linux/.config .


配置config

make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig


3、增加系统调用

在linux/arch/arm/kernel/目录下新建mysyscall.c文件

#include <linux/kernel.h>
void mysyscall(void) {
	printk("This is a new system call!haha!\n");
}

在linux/arch/arm/kernel/call.S中添加新的系统调用



修改arch/arm/kernel/目录下的Makefile文件,在obj-y后面添加mysyscall.o



在顶层Linux目录下编译新内核:

make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k

编译module lib文件

在linux的上层目录新建modules文件夹,进入linux内核代码所在文件夹,执行下面语句编译

make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=../modules


备份原firmware文件

mkdir firmware_old
cd /boot/
cp *.elf *.bin ~/kernel/firmware_old/

将以下新的内核文件通过scp放入树莓派目录

linux/arch/arm/boot/Image ——》/boot/kernel_new.img
modules/lib ——》 /
cd firmware/boot
bootcode.bin fixup.dat fixup_cd.dat start.elf ——》 /boot (这些文件若没有需要从文章首部的github/firmware下载)




修改树莓派的启动配置文件

sudo nano /boot/config.txt

在首行修改为“kernel=kernel_new.img”。

4、重启测试

输入命令查看内核版本

uname -a


可见内核版本已经升级为3.6.11


编写函数调用

#include <stdio.h>
#define sys_call() {__asm__ __volatile__ ("swi 0x900000+223\n\t");} while(0)
 
int main(void) {
    sys_call();
    printf("Type \"dmesg | tail\" to see the result.\n");
 
    return 0;
}


编译运行:


输入dmesg | tail查看结果:



函数调用已经成功添加。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值