aix内核是linux,使用GCC在AIX6.1系统上进行内核扩展

AIX有本土的C编译器XLC,不过这个东西不是免费的。所以我今天尝试了一下用GCC在AIX系统上做内核扩展的实验,当然过程并不是一帆风顺的,这很正常,好在最终成功实现了,期间离不开google上其他网友的分享,所以我也在这篇博文里尽可能完整地把这其中每个过程记录下来.

首先,我们需要在AIX环境下安装GCC,这个我直接从网上下rpm包,然后用rpm命令安装。gcc for aix的rpm包可以从下面的链接获得:

因为我自己经常遇到链接失效的问题,所以在此我希望你足够幸运能打开这个链接,至少今天在我这里是可以的,我下的文件是

文件下来之后,用rpm -ivh gcc-4.2.0-3.aix6.1.ppc.rpm就会把GCC安装到系统上了,这步非常简单,应该不会出错。安装好之后,运行一下gcc -v的输出如下:

bash-3.2# gcc -v

Using built-in specs.

Target: powerpc-ibm-aix6.1.0.0

Configured with: ../configure --with-as=/usr/bin/as --with-ld=/usr/bin/ld --enable-languages=c,c++,java --prefix=/opt/freeware --enable-threads --enable-version-specific-runtime-libs --host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --disable-libjava-multilib

Thread model: aix

gcc version 4.2.0

有了GCC之后,接下来就是实际的做一个AIX内核扩展,源码直接来自:Writing AIX Kernel Extension

下面开始编译链接过程,这个对新手来说是最容易出错的环节:

a. 编译(但不链接):

bash-3.2# gcc -D_KERNEL -g -O2 -pipe -maix64 -ffreestanding -msoft-float -c kernext_hello.c

上面的-O2选项很重要,否则接下来的ld阶段会出现一个类似下面的错误:

bash-3.2# ld -o kernext_hello -b64 -bI:/usr/lib/kernex.exp -lsys -lcsys -e hello_init kernext_hello.o

ld: 0711-317 ERROR: Undefined symbol: .__fd_getdtablesize

ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.

编译阶段成功生成了一个kernext_hello.o目标文件,用file命令看一下其格式:

bash-3.2# file kernext_hello.o

kernext_hello.o: 64-bit XCOFF executable or object module not stripped

b.链接

bash-3.2# ld -o kernext_hello -b64 -K -bI:/usr/lib/kernex.exp -lsys -lcsys -ehello_init kernext_hello.o

这步将产生一个AIX内核模块kernel_hello.

然后就可以通过下面的命令来加载卸载该模块了:

bash-3.2# ./kctrl ./kernext_hello

内核模块中消息的输出可以采用诸如:uprintf("hello world, command=0x%x\n", cmd);这样的方式,虽然有bsdlog这样的函数,但是我试了很久也没有成功,倒是直接在命令行中启动syslogd才可以看到log信息,不过又出现大量message的现象,后来我索性放弃了,因为我觉得uprintf蛮好。

过程其实蛮简单的,善于利用google就可以了。再次感谢其他网友的无私奉献!

阅读(5424) | 评论(2) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值