firefly rk3288 内核模块编译
在驱动开发的过程中,常常需要对代码进行返回的调试,如果返回的编译再烧写内核,势必会浪费开发人员大量的时间和心力,加班加点那是时常的事。为此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 内核模块编译的更多相关文章
- ubuntu16.04下firefly rk3288的编译安卓4.4
		一.背景 OS: ubuntu 16.04 二.配置交叉编译环境 2.1 安装openjdk sudo apt-get install openjdk-7-jdk 2.2 使在同一台机器上可以编译an ... 
- 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 ... 
- Android 6.0 RK3288 ROM编译详解+命令详解【转】
		本文转载自:http://blog.csdn.net/MLQ8087/article/details/58607692 Android 6.0 RK3288 ROM编译详解+命令详解 原创 2017年 ... 
- linux内核模块编译makefile
		linux内核可加载模块的makefile 在开发linux内核驱动时,免不了要接触到makefile的编写和修改,尽管网上的makefile模板一大堆,做一些简单的修改就能用到自己的项目上,但是,对 ... 
- Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误
		. . . . . 今天把 Ubuntu 14.04 升级到了最新的 4.0.5 的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友. 先 ... 
- ubuntu下helloworld内核模块编译
		1.hello.c #include<linux/init.h> #include<linux/module.h> MODULE_LICENSE("Dual BSD/ ... 
- 20135323符运锦----LINUX第二次实践:内核模块编译
		Linux实践二--模块 一.知识点总结 ①Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率 ... 
- 20135319zl内核模块编译报告
		内核模块编程学习报告 1.编写一个简单的输出信息的模块 源代码: Makefile 编译模块 加载模块 测试模块(dmesg) 卸载模块 Sudo rmmod 1 使用dmesg查看情况 2.输出当前 ... 
- Android内核模块编译执行
		Author: GeneBlue 0X01 前言 内核驱动是漏洞的高发区,了解Android驱动代码的编写是分析.利用驱动漏洞的基础.本文以一个"hello"驱动为例,简单介绍内核 ... 
随机推荐
- 浏览网页之Web服务器
			Web服务器... ----------------------------- 网站服务器响应用户请求 ========================= 浏览网页的时候需要翻越一道墙 Firewal ... 
- poj3928 la4329 pingpong
			Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ... 
- 常用的十大Python开发工具
			据权威机构统计,Python人才需求量每日高达5000+,但目前市场上会 Python 的程序员少之又少, 竞争小,很容易快速高薪就业.可能你并不太了解常用的十大Python开发工具都有哪些,现在告诉 ... 
- Redis基本数据类型
			-------------------Redis基本数据类型------------------- 1.String 字符串 1.概念 1.String 是redis最基本的类 ... 
- 极化码的matlab仿真(2)——编码
			第二篇我们来介绍一下极化码的编码. 首先为了方便进行编码,我们需要进行数组的定义 signal = randi([0,1],1,ST); %信息位比特,随机二进制数 frozen = zeros(1, ... 
- Java线程调度—休眠
			线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int nanos) ,均为静态方法,那调用sleep休眠的哪个线程呢?简单说 ... 
- 转: 【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)
			简单使用Lock锁 Java5中引入了新的锁机制--Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lock接 ... 
- 转:【深入Java虚拟机】之三:类初始化
			转载请注明出处:http://blog.csdn.net/ns_code/article/details/17845821 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Jav ... 
- spring的list ,set,map,properties注入(set,get注入)
			①Message.java: package com.hts.entity; import java.io.Serializable; import java.util.List; import ja ... 
- 201521123044 《Java程序设计》第3周学习总结
			1. 本章学习总结 2. 书面作业 1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ... 
