您的位置:首页 > 运维架构 > Linux

嵌入式LAB 6:Linux内核编译

2016-06-20 18:17 323 查看

前期工作准备

Mac OS X + Ubuntu14.04虚拟机

安装交叉编译工具

适合树莓派的Linux内核

器材准备

树莓派

外接显示屏

实验步骤

1、寻找、下载Linux实验板卡所用的Linux内核源码

从github上,把内核源代码克隆下来。地址如下:

https://github.com/raspberrypi/linux.git

为了达到一致的效果,我选用了和教程一样的3.18版本。



2、在内核中加入新的系统调用,具体功能没有要求,能输出调试信息即可

添加系统调用



系统调用实际上是调用内核某个函数的过程。所以,为了告诉操作系统什么时候该用什么函数,需要在内核中进行一些修改。首先,你需要在内核中有一个这样的可执行的函数。在arch/arm/kernel中新建一个sys_mysyscall.c文件,只包含一个函数,其作用为在运行后输出一条内核日志。

修改Makefile中的obj-y字段,将sys_mysyscall.o加入目标文件中。即将该函数纳入系统的编译进程。



而后,你需要让操作系统知道这个函数是处理某个系统调用的函数。此时,需要修改系统的中断向量表。此时需要修改arch/arm/kernel/calls.S文件。



在include/uapi/asm-generic/unistd.h头文件中将223号调用与某个宏进行关联,在syscall()中注册一个位置,方便调用。接下来就可以开始编译了。

3、修改内核代码配置,编译内核



首先是config文件,可以使用现在树莓派上使用的config文件进行编译,树莓派上的配置文件是/proc/config.gz,使用zcat命令可以直接查看。而按照官方教程,源码包内有相关配置可以直接拿来使用。这里我直接通过命令进行配置.config文件,就不直接从树莓派上下载下来了。



下面可以开始编译了。编译方式如上图所示。编译期间出过几次错误,不过都能够顺利地解决。

4、将编译好的内核装载到板卡启动。

编译完成之后就是安装,如果烧录了树莓派官方给出的SDcard镜像,那么现在你的SD卡分区长这样。SDcard使用读卡器接入电脑。SDCard有两个分区,一个是boot区,格式是fat32,大小仅有数十兆。一个是ext4区,需要挂在到磁盘上。学长的博客上有很多教程。我们只需要写一个脚本就好。



做好之后,我们就可以把内核移植到树莓派上,并开机了。



5、编写C代码,用两种方法做系统调用,测试:





用上述两种方式进行系统调用,结果如下图所示:



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  嵌入式