本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei-he-mo-kuai/

高通Android环境中Linux内核会作为Android的一部分进行编译,直接使用make即可一次性从头编到尾。而有的平台比如Marvell,内核的编译操作相对比较独立,必须使用标准的内核编译命令进行单独编译。一般来说,用高通的这种方式比较傻瓜化,一步到底的感觉;而用Marvell的方式用户干预较多,灵活性也更大。当然这里不是比较他们孰优孰劣,对我来说这两种方式各有千秋。在遇到具体问题时,有时还会觉得独立编译内核的方式比较方便,比如编译内核模块这一点上。

编译内核模块之前必须先编译内核,编译内核之前必须先指定内核配置。在独立编译内核情况下,编译一遍内核后,可以直接使用 make module 来编译内核模块,如果修改了相应模块文件,使用相同的命令也能很快的进行增量编译。而在高通环境下,由于内核的编译过程已经被集成到Android的编译中,所以每次编译内核或者内核模块时,都必须通过Android的编译环境进行启用。虽然Android提供诸如 make bootimage 命令,可以只编译bootimage相关内容,但是Android庞大的编译体系在初始化时也会占用很多的时间。前段时间在调试一个独立的内核模块时就一直被这个问题困扰着,每次修改模块代码后都必须通过 make bootimage 来编译。虽然只有一个文件,但是每次编译都花费至少1min30sec,严重影响了开发进度。为此,自己参考内核模块独立编译的Makefile和Android的环境特点写了一个内核模块编译Makefile。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Author: zhiqiang.xu
# EMail: xeonxu@gmail.com
CROSS_ARCH:=ARCH=arm CROSS_COMPILE="$(ARM_EABI_TOOLCHAIN)/arm-eabi-"
KDIR:=$(ANDROID_PRODUCT_OUT)/obj/KERNEL_OBJ/
PWD:=$(shell pwd) obj-m:= my_module.o
.PHONY: modules package clean
all:package
modules:
@if [ "$(ANDROID_BUILD_TOP)_yes" = "_yes" ]; then echo "You have to run \". build/envsetup.sh\" to init enviroment first. \nAnd then you have to run
\"choosecombo\" to setup the project."&&exit 1; fi
@if [ ! -d $(KDIR) ]; then echo "Build kernle first."&&cd $(ANDROID_BUILD_TOP)&&make bootimage&&cd -; fi
$(MAKE) $(CROSS_ARCH) -C $(KDIR) M=$(PWD) modules package:modules
@mkdir -p ./package
@cp $(obj-m:.o=.ko) ./package clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers package

该Makefile默认会将当前目录下的 my_module.c 文件编译为内核模块。同时,在编译时会强制检查Android的环境是否正确配置,如果没有配置它会进行相应提示后退出编译处理。编译模块时使用的内核配置是编译Android时指定项目所配置的内核配置。如果内核还没有编译,则在编译模块之前会自动编译内核主体。如果一切OK,则每次只会编译修改过的模块文件。编译好后会将模块文件单独拷贝到当前目录下的 package 目录中,方便使用。

使用该编译脚本后,模块的编写调试效率高了不少,至少每次编译模块都可以在5sec内搞定了。加上上机实测调试,也能在30sec内完成。生命很可贵,像我一样当个懒人吧。

在高通平台Android环境下编译内核模块【转】的更多相关文章

  1. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  2. Android 环境下编译FFmpeg

    Android 环境下编译FFmpeg 开发环境:Ubuntu 12.04.2 LTS , android-sdk-linux, android-ndk-r8e 一 .X264 编译 1.    X2 ...

  3. 基于msm8909高通平台Android驱动开发之hello程序

    本文转载自:http://www.itwendao.com/article/detail/227839.html Android驱动开发之Hello实例:   驱动部分 modified:   ker ...

  4. 高通平台的bootloader过程【转】

    ====================基本知识=======================LK是(L)ittle (K)ernel的缩写.高通平台android普遍采用LK作为其bootloade ...

  5. 高通平台Bootloader启动流程【转】

    本文转载自:http://blog.csdn.net/fang_first/article/details/49615631 ====================基本知识============= ...

  6. Android上HDMI介绍(基于高通平台)

    本文重点针对HDMI在android上的应用,而比较相关的就是overlay机制.overlay在这里只是简单的介绍,后续会有文章再专门详述. 我没记错的话,高通从7X30开始,平台就可以支持HDMI ...

  7. 高通平台 lcd driver 调试小结

    一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2  开发环境 And ...

  8. Boost学习总结(一)VS2010环境下编译STLport和Boost

    Boost学习总结(一)VS2010环境下编译STLport和Boost Boost简介 Boost库是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库.1998年,Beman G.Da ...

  9. 009全志R16平台tinav3.0下编译不过的问题

    009全志R16平台tinav3.0下编译不过的问题 2018/11/13 11:39 版本:V1.0 开发板:SC3817R SDK:tina v3.0 1.01原始编译全志r16平台tinav3. ...

随机推荐

  1. 正确理解hadoop 2.x 的环形缓冲区: (一) MR环形缓冲区的结构

    转载:http://blog.csdn.net/HADOOP_83425744/article/details/49560583 http://bigdatadecode.club/MapReduce ...

  2. linux中文件描述符

    :: # cat ping.txt PING baidu.com (() bytes of data. bytes from ttl= time=32.1 ms bytes from ttl= tim ...

  3. 纯CSS实现的很酷的卡通肖像和眨眼动效

    产品设计技术趋势 当前产品设计和开发的一个主要技术趋势除了响应式外, 还有尽量使用CSS/HTML5技术替代图片,这样能够获得非常好的设计扩展性和页面訪问性能. CSS卡通实例 以下就是一个英国WEB ...

  4. <LeetCode OJ> 257. Binary Tree Paths

    257. Binary Tree Paths Total Accepted: 29282 Total Submissions: 113527 Difficulty: Easy Given a bina ...

  5. canvas图片压缩,局部放大,像素处理

    直接上代码:(具体看注释) 需要引用jquery.min.js <!DOCTYPE html> <html lang="en"> <head> ...

  6. sql join相关

    JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行,返回左表所有行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行,返回右表 ...

  7. ios控件自定义指引

    转载自:http://bbs.9ria.com/thread-256747-1-1.html 一直以来都想写点什么,做点有意义的事,从今天开始我将会把自己在这一年的学习和应用IOS开发中的学习心得和体 ...

  8. HDOJ Oulipo 1686【KMP】

    Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. 自己定义ProgressDialog载入图片

    使用系统载入框 mDialog = new ProgressDialog(this); mDialog.setCancelable(true);//能否够被取消 mDialog.setMessage( ...

  10. 软件工程第2次作业——Visual Studio 2017下基于C/C++的VSTS单元测试实践

    Write one minute, test all day long. 环境确定 IDE:Microsoft Visual Studio 2017 Community 语言:C++ 单元测试工具:V ...