具体如下:
//-------------------------------------------------------------------------------------------------------------
// 第一步:下载 android kerenl source
//-------------------------------------------------------------------------------------------------------------
>mkdir android-kernel
android-kernel> git clone
20cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8%4y4H3i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6C8k6i4u0F1k6h3I4Q4x3V1k6Y4L8$3I4V1k6X3W2K6K9q4)9J5k6h3N6A6N6l9`.`.
android-kernel> cd goldfish
android-kernel/goldfish> git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.10
remotes/origin/android-3.18
remotes/origin/android-3.4
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.10-l-mr1-dev
remotes/origin/android-goldfish-3.10-m-dev
remotes/origin/android-goldfish-3.18
remotes/origin/android-goldfish-3.18-dev
remotes/origin/android-goldfish-3.4
remotes/origin/android-goldfish-3.4-l-mr1-dev
remotes/origin/android-goldfish-4.4-dev
remotes/origin/heads/for/android-goldfish-3.18-dev
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
(选择 3.4 的版本,与“调试手机的内核版本一致)
android-kernel/goldfish> git checkout -t remotes/origin/android-goldfish-3.4 -b goldfish3.4
//-------------------------------------------------------------------------------------------------------------
// 第二步:下载 交叉编译工具(不采用ndk里的工具)
//-------------------------------------------------------------------------------------------------------------
> mkdir android-toolchain
android-toolchain> git clone
236K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8%4y4H3i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6H3L8r3q4@1k6X3!0J5L8g2)9J5c8Y4m8J5k6h3u0#2K9h3I4@1
> vi ~/.bashrc
增加以下代码:
export PATH="/test_dir/android-toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH"
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
//-------------------------------------------------------------------------------------------------------------
// 第三步:编译 android kerenl module
//-------------------------------------------------------------------------------------------------------------
1、编写Makefile
obj-m := test.o
test-objs := test_1.o test_2.o test_3.o\
test_4.o
KDIR := /test_dir/android-kernel/goldfish
ARCH = arm
CROSS_COMPILE = arm-eabi-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
all: realclean mod clean
mod:
make -C $(KDIR) CFLAGS_MODULE=-fno-pic ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=`pwd` modules
realclean:
rm -rf *.o *.cmd .tmp* *.ko.cmd *.mod.c *.o.cmd .*.mod.o.cmd .*.ko.cmd .*.o.cmd *.ko
clean:
rm -rf *.o *.cmd .tmp* *.ko.cmd *.mod.c *.o.cmd .*.mod.o.cmd .*.ko.cmd .*.o.cmd
2、编译
> make all
成功后,得到 test.ko
//-------------------------------------------------------------------------------------------------------------
// 第四步:在android手机上运行
//-------------------------------------------------------------------------------------------------------------
test_dir> adb root
test_dir> adb push test.ko /data
test_dir> adb shell
android #> cd /data
android #> insmod test.ko
(得到的错误提示:)
insmod: init_module 'test.ko' failed (Exec format error)
=======
问题:
=======
何解?请教各位大师哪里出错?
=======
补充:
=======
1、用于调试的“手机”的配置:
android 版本 :
4.4.4 KTU84P
内核版本 :
3.4.0-gb46cc0f
2、我baidu了一下,之前已有人发帖问过,解决的方法有以下几种:
1)Makefile中增加 CFLAGS_MODULE=-fno-pic
2)注意版本的一致
3)放入 /system/lib/modules
上面的我都试过(我手机的“内核版本”为3.4.0,我使用的goldfish版本为3.4,是一致的),结果都还是得到“一样”的错误提示(insmod: init_module 'test.ko' failed (Exec format error))
3、在得到错误提示后,我也查看了 dmesg,但没有得到有用的信息,具体如下:
android #> dmesg
............................
............................
<4>[ 2342.084785] QBMS Reported SOC = 100
<4>[ 2342.090095] QBMS Reported SOC = 100
<4>[ 2349.044528] QBMS ibat_ua-1000 vbat_uv4341981
<4>[ 2349.044559] QBMS cSOC100 temp264 rbatt168 fcc2095000 uuc41900 rc2095000 cc-34 ocv4350000
<4>[ 2369.044528] QBMS ibat_ua-1600 vbat_uv4342569
<4>[ 2369.044559] QBMS cSOC100 temp264 rbatt168 fcc2095000 uuc41900 rc2095000 cc-44 ocv4350000
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课