本文中使用的是linageOs源码中下载的oneplus3 安卓10内核源码进行研究测试。交叉编译链使用的是linageOs源码中的交叉编译链。
lineageOs源码中oneplus3内核源码位置路径:
lineageOs源码中交叉编译目录位置路径:
为了方便研究测试,不破坏lineageOs中的内核源码结构。我新建一个目录专门存放内核源码、内核模块源码。并将内核源码拷贝到该目录。
本文后续测试的内核源码目录路径:
本文后续内核模块编写存放目录路径:
安卓源码中device/厂商/手机型号/BoardConfig.mk文件中配置了内核源码路径和编译配置文件。因此在device/oneplus/oneplus3/BoardConfig.mk中存放了相关的内核配置信息,如下所示:
以上TARGET_KERNEL_CONFIG变量指定了oneplus3内核的编译配置文件名为:lineageos_oneplus3_defconfig。
在内核源码中编译配置文件一般存放在路径arch/处理器平台/configs下面。由于一加3手机为arm64,所以在路径arch/arm64/configs下找到配置文件lineageos_oneplus3_defconfig。如下所示:
由于编译内核模块的时候需要依赖于已经编译过的内核输出,并且内核需要配置为可加载才能正常编译内核模块。所以需要修改一下arch/arm64/configs/lineageos_oneplus3_defconfig,添加如下配置项。
脚本如下
以上脚本在终端难的一个一个的输入,我将上面的弄成一个make.sh文件,到时候直接执行。make.sh内容如下:
在终端执行make.sh之后就可以看到编译内核了,如下所示:
编译完成之后,可以在目录/home/qiang/myproject/kernel/oneplus3/msm8996/out下面找到编译产生的文件和内核镜像。
此处编写一个简单的HelloWorld模块进行研究测试。
创建helloworld.c模块源文件
文件代码如下:
创建模块编译配置文件Makefile
Makefile如下:
编译如下:
模块编译好之后就可以 adb push到手机,使用insmod加载模块进行测试验证了。
以后就可以通过写内核系统hook模块进行系统调用内核层拦截、写netfileter hook模块进行网络管控等等操作。
点我阅读原文
/
home
/
qiang
/
lineageOs
/
kernel
/
oneplus
/
msm8996
/
home
/
qiang
/
lineageOs
/
kernel
/
oneplus
/
msm8996
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
home
/
qiang
/
myproject
/
kernel
/
oneplus3
/
msm8996
home
/
qiang
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
home
/
qiang
/
myproject
/
kernel
/
oneplus3
/
modules
/
home
/
qiang
/
myproject
/
kernel
/
oneplus3
/
modules
BOARD_KERNEL_BASE :
=
0x80000000
BOARD_KERNEL_PAGESIZE :
=
4096
BOARD_KERNEL_TAGS_OFFSET :
=
0x02000000
BOARD_RAMDISK_OFFSET :
=
0x02200000
BOARD_KERNEL_IMAGE_NAME :
=
Image.gz
-
dtb
TARGET_KERNEL_SOURCE :
=
kernel
/
oneplus
/
msm8996
TARGET_KERNEL_CONFIG :
=
lineageos_oneplus3_defconfig
BOARD_KERNEL_BASE :
=
0x80000000
BOARD_KERNEL_PAGESIZE :
=
4096
BOARD_KERNEL_TAGS_OFFSET :
=
0x02000000
BOARD_RAMDISK_OFFSET :
=
0x02200000
BOARD_KERNEL_IMAGE_NAME :
=
Image.gz
-
dtb
TARGET_KERNEL_SOURCE :
=
kernel
/
oneplus
/
msm8996
TARGET_KERNEL_CONFIG :
=
lineageos_oneplus3_defconfig
qiang@ubuntu:~
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
arch
/
arm64
/
configs$ pwd
/
home
/
qiang
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
arch
/
arm64
/
configs
qiang@ubuntu:~
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
arch
/
arm64
/
configs$ ls
-
la lineageos_oneplus3_defconfig
-
rw
-
rw
-
r
-
-
1
qiang qiang
15001
1
月
3
23
:
00
lineageos_oneplus3_defconfig
qiang@ubuntu:~
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
arch
/
arm64
/
configs$ pwd
/
home
/
qiang
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
arch
/
arm64
/
configs
qiang@ubuntu:~
/
myproject
/
kernel
/
oneplus3
/
msm8996
/
arch
/
arm64
/
configs$ ls
-
la lineageos_oneplus3_defconfig
-
rw
-
rw
-
r
-
-
1
qiang qiang
15001
1
月
3
23
:
00
lineageos_oneplus3_defconfig
CONFIG_MODULES
=
y
CONFIG_MODULE_UNLOAD
=
y
CONFIG_MODULES
=
y
CONFIG_MODULE_UNLOAD
=
y
export ARCH
=
arm64
export SUBARCH
=
arm64
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
aarch64
/
aarch64
-
linux
-
android
-
4.9
/
bin
:$PATH
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
arm
/
arm
-
linux
-
androideabi
-
4.9
/
bin
:$PATH
export CROSS_COMPILE
=
aarch64
-
linux
-
android
-
export CROSS_COMPILE_ARM32
=
arm
-
linux
-
androideabi
-
make O
=
out lineageos_oneplus3_defconfig
make
-
j2 O
=
out ARCH
=
arm64
export ARCH
=
arm64
export SUBARCH
=
arm64
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
aarch64
/
aarch64
-
linux
-
android
-
4.9
/
bin
:$PATH
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
arm
/
arm
-
linux
-
androideabi
-
4.9
/
bin
:$PATH
export CROSS_COMPILE
=
aarch64
-
linux
-
android
-
export CROSS_COMPILE_ARM32
=
arm
-
linux
-
androideabi
-
make O
=
out lineageos_oneplus3_defconfig
make
-
j2 O
=
out ARCH
=
arm64
cd .
/
msm8996
make mrproper
make clean
export ARCH
=
arm64
export SUBARCH
=
arm64
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
aarch64
/
aarch64
-
linux
-
android
-
4.9
/
bin
:$PATH
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
arm
/
arm
-
linux
-
androideabi
-
4.9
/
bin
:$PATH
export CROSS_COMPILE
=
aarch64
-
linux
-
android
-
export CROSS_COMPILE_ARM32
=
arm
-
linux
-
androideabi
-
make
-
j2 O
=
out lineageos_oneplus3_defconfig
make
-
j2 O
=
out ARCH
=
arm64
cd .
/
msm8996
make mrproper
make clean
export ARCH
=
arm64
export SUBARCH
=
arm64
export PATH
=
/
home
/
qiang
/
lineageOs
/
prebuilts
/
gcc
/
linux
-
x86
/
aarch64
/
aarch64
-
linux
-
android
-
4.9
/
bin
:$PATH
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-4-12 22:07
被蟑螂一号编辑
,原因: