在驱动开发的过程中,常常需要对代码进行返回的调试,如果返回的编译再烧写内核,势必会浪费开发人员大量的时间和心力,加班加点那是时常的事。为此linux提供了编译内核模块的方式,无需返回烧写内核,只需insmod内核模块即可,大大提高了开发效率。

  内核模块的开发核心还是makefile,如下是使用的firefly rk3288的sdk进行模块开发的makefile和测试程序

 PWD=$(shell pwd)
KDIR:=/root/exe/firefly/firefly-rk3288-kernel
obj-m:= hello.o all:
make ARCH=arm CROSS_COMPILE=/root/exe/firefly/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- -C $(KDIR) M=$(PWD) modules
 #include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h> static int __init hello_init(void)
{
printk(KERN_ALERT "hello driver init \n");
return ;
} static void __exit hello_exit(void)
{
printk(KERN_ALERT "hello driver exit \n");
} module_init(hello_init);
module_exit(hello_exit);

  KDIR指的是内核代码的路径,makefile中还设置了ARCH和CROSS_COMPILE变量,这是编译该sdk的时候需要使用到的变量参数,我们可以简单的看下kernel路径下面的makefile就知道为啥了

line204和205,可以看到有两个变量都使用到了ARCH这个变量,搜索一下SRCARCH这个变量,找到了如下这个地方,其实就是根据ARCH变量来决定使用哪个makefile,由于我使用的是arm板子,当然得用arm下面的makefile啦

而cross_compile其实就是指定了编译用的编译链而已,如下所示就可以看出来

现在大概知道了makefile是怎么回事情了,这个时候执行make就会在当前目录下生成hello.ko文件,将hello.ko文件拷贝到开发板中,使用命令insmod hello,ko,然后使用命令dmesg,就能看到熟悉的hello打印信息了。

firefly rk3288 内核模块编译的更多相关文章

  1. ubuntu16.04下firefly rk3288的编译安卓4.4

    一.背景 OS: ubuntu 16.04 二.配置交叉编译环境 2.1 安装openjdk sudo apt-get install openjdk-7-jdk 2.2 使在同一台机器上可以编译an ...

  2. linux/module.h: No such file or directory 内核模块编译过程

    1.缺少Linux kernel头文件 To install just the headers in Ubuntu: sudo apt-get install linux-headers-$(unam ...

  3. Android 6.0 RK3288 ROM编译详解+命令详解【转】

    本文转载自:http://blog.csdn.net/MLQ8087/article/details/58607692 Android 6.0 RK3288 ROM编译详解+命令详解 原创 2017年 ...

  4. linux内核模块编译makefile

    linux内核可加载模块的makefile 在开发linux内核驱动时,免不了要接触到makefile的编写和修改,尽管网上的makefile模板一大堆,做一些简单的修改就能用到自己的项目上,但是,对 ...

  5. Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误

    . . . . . 今天把 Ubuntu 14.04 升级到了最新的 4.0.5 的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友. 先 ...

  6. ubuntu下helloworld内核模块编译

    1.hello.c #include<linux/init.h> #include<linux/module.h> MODULE_LICENSE("Dual BSD/ ...

  7. 20135323符运锦----LINUX第二次实践:内核模块编译

    Linux实践二--模块 一.知识点总结 ①Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率 ...

  8. 20135319zl内核模块编译报告

    内核模块编程学习报告 1.编写一个简单的输出信息的模块 源代码: Makefile 编译模块 加载模块 测试模块(dmesg) 卸载模块 Sudo rmmod 1 使用dmesg查看情况 2.输出当前 ...

  9. Android内核模块编译执行

    Author: GeneBlue 0X01 前言 内核驱动是漏洞的高发区,了解Android驱动代码的编写是分析.利用驱动漏洞的基础.本文以一个"hello"驱动为例,简单介绍内核 ...

随机推荐

  1. VMware Workstation 12 Pro 之安装林耐斯优麒麟 X64系统

    VMware Workstation 12 Pro 之安装林耐斯优麒麟 X64系统... --------------------- 先去官网下载ISO格式的系统安装包:http://www.ubun ...

  2. BotVS开发基础—2.5 策略交互

    一.代码部分 isOpen = False; # 是否 开仓 price = 0; # 全局变量 价格 amount = 0; # 全局变量 下单量 def exec_command(command) ...

  3. kettle使用正则表达式动态获取excel表

  4. MySQL索引选择及规则整理

    索引选择性就是结果个数与总个数的比值. 用sql语句表示为: SELECT COUNT(*) FROM table_name WHERE column_name/SELECT COUNT(*) FRO ...

  5. Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇

    Microsoft .Net Remoting系列专题之一 一.Remoting基础 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式.从微软的产品角度来看,可以说Remotin ...

  6. chrome开发工具指南(六)

    检查和编辑页面与样式 使用 Chrome DevTools 的 Elements 面板检查和实时编辑页面的 HTML 与 CSS. 在 Elements 面板中检查和实时编辑 DOM 树中的任何元素. ...

  7. makefile使用.lds链接脚本以及 $@ ,$^, $,< 解析

    先来分析一个简单的.lds链接脚本 例1,假如现在有head.c init.c nand.c main.c这4个文件: 1.1 首先创建链接脚本nand.lds: SECTIONS { firtst ...

  8. java四则运算生成器

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  9. 团队作业8——Beta项目(冲刺计划)

    Beta阶段冲刺计划 经过几周的努力我们完成了Alpha的开发,进过一段时间的调整与重组我们继续向Beta版进发. 1. 新成员介绍 林乔桦(201421123074):掌握c语言,JavaScrip ...

  10. 201521123086 《Java程序设计》第8周学习总结

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 书面作业 1.List中指定元素的删除 题集jmu-Java-05-集合之4-1 1.1 实验总结 Answer: ...