热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

嵌入式LAB6:Linux内核编译

前期工作准备MacOSX+Ubuntu14.04虚拟机安装交叉编译工具适合树莓派的Linux内核器材准备树莓派外接显示屏实验步骤1、寻找、下载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、编写内核模块,在模块加载和卸载时能通过内核打印函数输出提示信息

内核模块


推荐阅读
author-avatar
xXxHolicxXx900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有