近期由于项目需要,需要自己写一个.ko文件,来操作寄存器,但是该.ko是不能跟整体工程在一起的,需要单独编译,这过成功遇到了大量的问题,现在终于解决,跟大家分享一下,很珍贵!!!

遇到的问题:

1. 在android设备中输入insmode hello.ko ,会提示"nsmod: error inserting 'hello.ko': -1 Required key not available"   .这是签名问题,没有使用该设备android工程的密钥进行签名。

2. 使用正确的android工程密钥签名后,依然insmode失败,提示"exec format error", 这是由于版本不对。

网上提到的方法:此方法可以了解linux的内容,但是实际不好使!!!

1.将自己的hello文件夹(内部有Kconfig, Makefile, hello.c)复制到随便一个文件夹下,如xxx_self_project/linux_xxx/drivers/hello/

2. 修改xxx_self_project/linux_xxx/drivers/目录下的  Kconfig和Makefile,可参考其他模块。

3.Makefile中为obj-m(生成ko), 不是obj-y

4.在xxx_self_project/linux_xxx/下,make menuconfig, 将hello选项选为[M], 保存,这时会生成xxx_self_project/linux_xxx/.config文件。

5.此时一点要,make savedefconfig(注意 savedefconfig是一个命令,不是一个文件名),对当前.config进行保存合并到默认的配置文件中。 效果可以查看xxx_self_project/linux_xxx/arch/xx/configs/xxxxdefconfig,或xxx_self_project/linux_xxx/include/config/auto.conf.

6.make modules    生成hello.ko

7.对hello.ko签名, 在xxx_self_project/linux_xxx/路径下, perl ./scripts/sign-file  sha512 signing_key.priv signing_key.x509 drivers/hello/hello.ko 

 查看是否签名成功:hexdump -C hello.ko | tail

       

8. adb push .....,然后insmod hello.ko ,此时安装的话,会出现错误"exec format error", 这是版本不对。

以上内容虽然没有解决问题,但是如果都经历一遍的话对linux的了解还是很好的。


下面是真正的正确的方法:

1.将整个android工程make一遍,

2.将hello文件夹(内部有Makefile, hello.c)拷贝到任一位置,我本人放在xxxx_self_project/ 的路径下,跟android和linux目录平行。

3.Makefile内容如下图,主要是KERNELDIR路径,该路径是android整个工程编译后临时文件的路径!!!!


  4. 在hello路径下make

       5. 签名,

5.1签名需要的密钥位于xxx_self_project/android/out/target/product/xxxxxx/kernel/下面,将signing_key.priv, signing_key.x509复制到hello下面。

  5.2 使用xxx_self_project/linux_xxxx/scripts/sign-file 进行签名

                        perl ../linuxxxx_/scripts/sign-file  sha512 signing_key.priv  signing_key.x509  hello.ko 

  5.3使用hexdump -C hello.ko | tail查看

经过以上方法,就可以将自己单独编译的.ko文件insmod到android设备里边了!!!!!!!!

更多相关文章

  1. Eclipse如何打包生成Apk安装包实例(图)
  2. AndroidStudio中AVD虚拟机设备空间不足调试过程出现的黑屏问题及
  3. 自定义实现向量图标动画VectorDrawable
  4. android studio生成签名导打包的方法
  5. Android混淆代码proguard,内存溢出
  6. android中引用项目工程中的sqlite文件
  7. android App全局SD卡路径统一管理
  8. Android动态加载补充 加载SD卡中的SO库
  9. Android(安卓)APK DEX分包总结

随机推荐

  1. Android包管理机制(二)PackageInstaller安
  2. Android小程序-Walker注册页面(六)
  3. 使用Android(安卓)NDK内置编译器为Androi
  4. 【Android】BroadcastReceiver发送intent
  5. 修改Android模拟器的IMEI号
  6. android 中 XML 重点
  7. Android(安卓)Widget开发系列(三)
  8. Android瀑布流StaggeredGridView学习研究
  9. 软件开发文档(以太网)
  10. Cocos2dx-- 手机游戏时不锁屏