复杂度3/5
机密度4/5
最后更新2021/05/19
我们有了加载程序(大部分),有了被加载程序,还缺什么?还缺如何编译,如何使用,先说编译,这是个make模板。
#cat makefile
all: mykext kloader
kloader: kloader.c
cc -o kloader kloader.c
mykext: myExtension.c
cc -q32 -o ext32.o -c myExtension.c
ld -b32 -o myExt32 ext32.o -e myEntry -bI:/usr/lib/kernex.exp -lsys -l csys
cc -q64 -o ext64.o -c myExtension.c
ld -b64 -o myExt64 ext64.o -e myEntry -bI:/usr/lib/kernex.exp -lsys -l csys
ar -X32_64 -r -v kernExt myExt32 myExt64
clean:
rm -f *.o kernExt myExt32 myExt64 kloader
说明:
- 关于loader没什么特别的,可以按照标准c编译处理;
- kernal extension不能直接编译链接一步完成,一般都是先编译为obj,再链接,最后还要打包;
- 由于AIX同时支持32位,64位目标码,所以在makefile中分别生成了两种格式的目标码;
- 内核扩展程序由于运行在内核中,不能使用普通的libc,只有syslib和csyslib可用,在这两个lib中,包含了主要的常用c函数,但还是有很多标准libc提供,但在这两个lib中不存在