内核中的开发与用户态差异并不大,本文编写一个我们最常见到的冒泡排序算法,以说明该问题。
开发环境
为了避免将自己的操作系统搞挂,本文在虚拟机中进行开发,这样我们可以随便折腾。本文所用的环境信息如下。
操作系统:Ubuntu 16.04 Server版
内核版本:4.4.0-31
编译环境:gcc 5.4.0
主程序代码
如下为基于内核模块的冒泡排序,本文将其封装为一个函数,输入为数组。通过主程序代码可以看出,也就是通过普通C语言实现,与用户态程序并没有一点差异。这个函数可以拷贝到用户态程序中直接使用。关于冒泡排序的实现本文不再赘述,这里只是介绍一下基于内核的实现情况。
#include #include #include #include /*冒泡排序主程序,实现降序排序 */void bubble_sort(int *array, unsigned int size){ int i = 0; int j = 0; int temp = 0; for (i = 0; i < size; i++ ) { for (j = 0; j < size - i - 1; j++) { if (array[j] < array[j + 1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } }}/* 用于打印数组成员 */void print_array(int *array, unsigned int size, char *prefix){ int i = 0; printk(KERN_NOTICE "%d: