嵌入式LAB 6:Linux内核编译
Posted tanxiaxuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式LAB 6:Linux内核编译相关的知识,希望对你有一定的参考价值。
前期工作准备
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、编写内核模块,在模块加载和卸载时能通过内核打印函数输出提示信息
以上是关于嵌入式LAB 6:Linux内核编译的主要内容,如果未能解决你的问题,请参考以下文章