嵌入式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、编写内核模块,在模块加载和卸载时能通过内核打印函数输出提示信息
相关文章推荐
- 我的 ARM+Linux 学习路线
- 开发学习记录之看门狗驱动
- 时钟+温度+遥控设置,综合时钟例子
- Linux下运行openwebos- -(转)
- Linux下运行openwebos- -(转)
- BusyBox 简化嵌入式 Linux 系统
- EGL 学习
- 嵌入式开发设计方法变化的背景
- 嵌入式人才的发展方向
- 汇编调用c函数为什么要设置栈
- 三角函数的实现
- 嵌入式桌面操作系统使用与制作攻略
- 嵌入式系统烧写uboot/bootloader/kernel的一般方法
- 甲骨文收购Sleepycat 丰富嵌入式产品线
- 嵌入式Linux操作系统学习规划
- 基于嵌入式多芯片模组的微机保护平台
- 嵌入式系统中常用文件系统的制作总结
- 嵌入式C语言基础教程一
- 汇总Dotfuscator自定义规则中的元素选择
- 3. 类型限定符