当前位置:  技术问答>linux和unix

花高分,与各位高手探讨一个linux内核开发的问题,权且当作抛砖引玉!

    来源: 互联网  发布时间:2015-11-22

    本文导语:  先说明一下背景:本人近来动念想在linux下开发一个网络入侵防御系统,为了降低开发的难度,准备先实现为一个linux应用程序(与snort相似),后续再移植到linux内核中,因为毕竟在内核中实现入侵防御,在性能方面...

先说明一下背景:本人近来动念想在linux下开发一个网络入侵防御系统,为了降低开发的难度,准备先实现为一个linux应用程序(与snort相似),后续再移植到linux内核中,因为毕竟在内核中实现入侵防御,在性能方面有优势,而且要实现实时阻断黒客入侵,也只有在内核中才能实现。
    本人以前使用C++开发跨平台应用软件的经历已经有五年多了,最近两年来,则是在使用C语言开发嵌入式的软件。个人的感觉,C++比C,在大的软件开发中的表现,要更胜一筹。因此本人倾向于采用C++来开发这个网络入侵防御系统。
    特别说明一下,本人在linux上的开发经验还不多,所以想向大家多多请教啦。

    接下来说明一下想探讨的问题:就本人的印象,在linux下的开发,大部分都是使用的C,使用C++来开发的很少,特别是在内核下使用C++来开发的,更是从来没有见过。想请教一下:在linux内核下,能否支持使用C++来开发?如果可以的话,开发中有什么方面需要注意的?使用C++开发内核,有没有风险和缺点?
    linux下为什么会大部分项目使用C来开发?有谁能详细的说明一下?

    如果哪位高人,能够推荐一下使用C++开发内核的开源项目,或者有这方面的开发资料,请帮忙提供一下。在此先行谢过。

    请大家帮我一下。多谢了!

|
我不是高人,不过也来凑一下热闹:
C++编译之后无非也是二进制文件,它同样遵循ELF目标文件格式,只要你的代码在编译后可以让连接器识别出来就一切OK了,所以在理论上是完全可行的方案!不过实际操作中会出现以下若干问题:
1.由于C++是基本兼容C的,但C++在包含C头文件时,C头文件里定义的所有变量与函数声明都必须包含#ifdef _cplusplus_之类,而LINUX内核头文件都没有提供这种形式,所以实际操作上基本上行不通,如果你非得要使用,你必须将你所用到的C头文件所有文件加上这样的标识,这是一个非常大的改动量
2.C语言的函数调用你的C++函数,这就出大问题了,由于在C++编译器中,把你的函数编译后形成的目标文件中的相应符号表不再是原来的函数名了,连接器就无法找到你的函数,所以你的模块初始化函数与模块卸载函数,以及其中所使用的函数与全局变量必须加上extern "C"标识,这样insmod才能认出你的符号,在你的那个fs_op****结构体中的所有函数接口要么就需要是extern "C"标识,要么就一定是C++的静态函数,因为你这个结构体会被加载到内核中去,内核由C语言编写,它无法识别你的this指针,你不能在C++代码使用任何C++库,仅能使用最基本的C++语法,如果你非得要使用C++库,就得要静态连接-lstdc++,并且将连接器用上-r参数(仅连接,不重定位),这样一来,文件相当大,注意了这一些问题后,还有最后一点:你只要去将你自己的C++函数回挂到内核的时候就一定跟上个规则一样,比如中断注册函数等,这样一来,你肯定觉得太麻烦了

总结:不要动这种想法,在写驱动时C语言足够了,如果在上面写应用的话,就用C++吧

|
还有一个大问题,如果你要insmod到内核中去,还需要考虑内核给每个应用程序的内核堆栈只有8k
,不大可能给你很深的函数调用层次。
就你这个应用来说,应该内核做一部分工作,大部分的工作还是要放到应用层上来做。内核的部分你用c语言写,应用层部分用c++写,是个不错的选择,关键要把这两个部分分清楚。

|
另外,C++程序需要额外初始化,如全局类实例的构造,而作为一个内核模块,内核并不知道要先调用此初始化入口,内核模块有自己的初始化规则(__init)。而且,new/delete不能用,因为它们要调用标准库....有如此众多的限制,C++的优势也所剩无几,为什么还要用C++ ?

|
以LZ对C,C++编译器,内核模块的了解,目前还是不要用C++写模块了,当你遇到一些技术难题的时候,你以目前的水平就无有为力了

|
Linus是反对用C++来实现内核的, 所以目前来说基本没希望在内核中用C++

|
说明一下 : 内核用C主要是考虑到系统性能问题。
而应用程序未必要只用C的,用C++的很多。 譬如用于实现KDE的QT。
实现GNOME的GTK也有C++ wrap的

|
分两部
一部分用于内核,可以做成模块驱动,c
一部分就在应用上,c++
我觉的这样可能好些,在功能上分的开,扩展也方便

|
mark

|
关注一下。。。刚刚建立的一个内核交流群。。。希望大家都能来一起交流学习
QQ群:10931036

    
 
 

您可能感兴趣的文章:

  • 急急急!!!高分求解linux 2.6 内核安装网卡的问题
  • 高分,linux内核问题!!!
  • 高分,内核中怎么打开文件??
  • 高分噢!内核线程绑定问题!急!!!
  • 高分求救,我的UNIX 不能联内核
  • 内核启动错误,高分请高手指点。。。
  • 高分!关于Linux内核驱动程序
  • 高分求解arm内核编译问题!
  • 高分求助,嵌入式LINUX内核移植问题
  • 请问如何安装一个LINUX内核到我的电脑上,成为一个系统比如安装linux-2.2.16-高分
  • 高分求助:内核模块编程中如何实现网络通信
  • 高分征求Linux内核的源代码!!!!!!!!!!!!!(最好给个具体的网址,可以直接下)
  • 高分,关于linux内核代码,疑惑部分肯求帮助!
  • 高分求助:linux内核中的汇编语言和Dos或windows下的汇编是一样的吗,有这方面的书或资料可供学习吗,分不够可再加,决不食言
  • 高手请进 给一个Linux内核编译全过程记录 高分相送
  • Linux内核裁减,高分求助!
  • 高分求助:内核模块编程能否使用系统调用?如何使用?
  • 高分请教编译内核详细步骤
  • ### 升级内核 ### 高分!!!
  • linux内核 uml转发 高分求助,紧急求救
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • php iis7站长之家
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3