lkm 的应用 Linux VS Android

 为什么需要lkm机制?

    作为单内核,linux不像微内核那般具有天生的动态可扩展性。为了弥补这一设计上的不足,linux采用了一种lkm机制。算是对微内核的一种的扩展,使系统功能具有一定的重构性。为什么这里用一定的可扩展行性呢?写过驱动程序的都知道,每次系统重新启动后,通过sudo insmod 命令添加的lkm便消失了。如果需要,必须重新添加。为了避免每次都手动添加,可以在系统启动脚本里面添加这一条命令来折中一下。否则,如果需要lkm常驻内存的话,只能重新编译内核,等待几个小时了-_- !!!

   第一部分:linux 中的 lkm

 大部分的linux发行版本均支持lkm,这一点不需要担心。在linux 2.x.x编译lkm均需要通过Makefile来完成,单一的gcc命令似乎不再能胜任编译的任务了。开门见山:来一个干货: hello ustc 。

   源码如下:hello.c

#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/unistd.h>

MODULE_LICENSE("GPL");

static int __init begin(void)
{
        printk("linux kernel : Hello ustc!! \n");
        return 0;
}

static void __exit end(void)
{
        printk("linux kernel: Bye bye!\n");            
}

module_init(begin);
module_exit(end);

 对应的Makefile如下: 

obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
 
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules
 
clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean

 已经验证过,编译没有任何问题。如果出现任何问题,检查Makefile的空格和Tab问题(属于Makefile细节问题,如遇到问题,网上查吧)。

 正常情况下,会生成hello.ko文件,sudo insmod hello.ko即可以完成模块加载工作。查看打印信息,命令为:dmesg。

 一旦恶意lkm进入内核后,理论上讲:此时整个os便不再可信。因为lkm可以获得任何想要的硬件参数,修该任何想要修改的地方。例如系统调用表的修改、硬件写保护的关闭、打开...有一点编程经验的程序员均可以轻松拿到想要的数据、修改想要隐藏的数据、增加想实现的功能。

   第二部分:Android 中的 lkm

 在Android中,lkm开发变得异常复杂。经验证,lkm的开发完全可以实现,但是遇到的麻烦远比预期多得多。首先编译方法的资料,网络上少之又少。其次,编译后遇到的首要问题就是,大多发行版的Android默认并不支持lkm。最终,当你信心满满的重新编译内核想验证lkm的威力的时候,麻烦又来了:Android版本的碎片化很严重,lkm的加载需要版本适配。

  本以为linux下的嵌入式汇编已经很恶心了,但是Andoird下的Arm指令Thumb指令才是真正的可怕。Thumb指令有区分Thumb-1 和Thumb-2指令。在写汇编的时候,需要的相对跳转的时候,可能会遇到很多麻烦,因为Arm下存在指令流水线的概念。

  Android中LKM的Makefile:

KERNELDIR := /home/zhouat/tegra/
PWD :=$(shell pwd)
ARCH=arm
CROSS_COMPILE=/home/zhouat/arm-eabi-4.6/bin/arm-eabi-
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld
obj-m := hello.o
modules:
	$(MAKE) -C $(KERNELDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modules  
clean:
	rm *.o *.ko *.mod.c *.markers *.order *.symvers 


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值