学习linux的时候,一般有两种方法。一种是配置Kconfig与Makefile文件,接着使用make menuconfig来实现内核的添加。还有一种是将驱动编译为.ko文件,通过insmod的方式来加载。

可最近在编译安卓源码,发现这样子行不通。当让,第二种方法是可以的。需要用adb工具,将驱动文件添加到手机内部,然后加载,这种方式对于要调TP驱动的我来说不是很方便。于是尝试使用第一种方法,make menuconfig,接着就在kernel目录下产生了.config文件,与在kernel/include/下产生了config的空文件夹。前者用来存放要编译的驱动信息,后者不知道。

在添加完驱动后,在安卓顶层目录下编译内核:make kernel 2>1& | tee log.txt  结果出现错误is not clean, please run 'make mrproper'  经过查找原因:grep -nR "is not clean, please run 'make mrproper' " *   发现是kernel顶层目录的Makefile文件里的提示语句。于是删除上述两个文件.config与config文件夹。再次编译,没有报错。

这样就产生了矛盾,于是在第一种方法的基础上不使用make menuconfig。在kernel/arch/arm/configs/目录下有对应平台的后缀为decongfig文件,在文件中添加选项并赋值为y即可。如果想查看文件是否被编译,则在文件中添加错误的代码,编译报错则代表成功。

转念一想,驱动的Makefile都是有固定格式的,如obj-y += 文件名.o  表示将驱动编译进内核,obj-m += 文件名.o 表示将驱动编译成模块。这样子,我们只需要将Makefile文件中的变量直接用y来代替即可,这样就可以将驱动编译进内核。当然,这样做要保证需要编译的部分已经在Makefile的编译流程中。如果是子目录,就需要被上级目录的Makefile所包含。

下图作为参考

安卓内核驱动编译的方法——自我感悟

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-25
  • 2021-12-19
  • 2021-07-26
  • 2022-12-23
  • 2021-10-28
  • 2022-12-23
猜你喜欢
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2021-05-20
  • 2021-06-24
  • 2021-08-21
  • 2021-06-13
相关资源
相似解决方案