BBS水木清华站∶精华区

发信人: boom (www), 信区: Linux        
标  题: another way for C++ in kernel 
发信站: BBS 水木清华站 (Sat Nov 18 13:23:56 2000) 
 
前面的文章里面介绍过可以在kernel中用c++,但是需要崇写new,delete等等 
最近由人在rtlinux的mailing list 上又提出了一种方法 
 
(rtlinux) 
On Fri, 17 Nov 2000, Alexander Lichius wrote: 
 i tried to use c++ because i wanted to estimate the performance of 
 plain C code and some C++ "object oriented" code. but my humble trials 
 were killed at compile time. i think the macros for using module 
 parameters are not defined in the g++ standard include files and i 
 didn't have the time to track down the definition in the C includes. 
 
Hi Alexander and Jef, 
I think they are defined in linux/module.h 
 
I have tried to compile a module in C++, but some of the necessary 
kernel module #include files use C++ reserved words as variable names. 
e.g., there is a variable called "new" (it is C, not C++, so it is ok) 
 
therefore, I could not compile C++ directly, but I did this way 
(skeleton code, missing many details): 
 
file module_main_file.c (C, not C++, gcc, not g++) 
#define MODULE 
#define __KERNEL__ 
#define __RT__ 
.. 
#include <rtl_sched.h>  
#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/version.h> 
#include "wrapper.c" 
.. 
int init_module() { 
...my rt stuff initilization, etc... 
pthread_create (&mytask, NULL, execute_module, (void *) 1); 
pthread_make_periodic_np (mytask, now + 0.5 * NSECS_PER_SEC, 0.1 * 
NSECS_PER_SEC); 
 
wrapper_init(); 

 
void* execute_module(void *data){ 
  while(1){ 
wrapper_do(); 
pthread_wait_np(); 
  } 

 
void cleanup_module() { 
  wrapper_close(); 
  pthread_delete_np (mytask); 

 
----------------end of file 
 
file wrapper.cc 
 
MYMAINOBJECT myobj; 
 
void wrapper_init() { myobj.init(); } 
void wrapper_do() { myobj.do(); } 
void wrapper_close() { myobj.close(); } 
 
this file I can compile with g++, and link with my c++ .o files.  
then I link this .o file with the main module .o file and... voilla! my 
c++ code works! 
 
Interesting: I use rtlinux 2.0, but with rtlinux 0.6 and linux 
2.0.33 I do not need this stuff: the main module can call my object and be 
compiledwith g++, no problem. 
 
 so i didn't bother about C++ but wrote my tasks in C. 
 did you or anybody else compiled some working C++ kernel modules? 
 
I know C++ is not supported in the kernel, and many people do not like 
to hear "c++ and kernel", but c++ can be still worth... 
 
----------------------------------------------------------- 
Luiz Gustavo Bizarro Mirisola 
Mestrando em Ciencia da Computacao - IC-Unicamp/LRV-IA-CTI  
MSc Student in Computer Science  
State University of Campinas, Brazil 
mirisola@dcc.unicamp.br 
----------------------------------------------------------- 
 
-- [rtl] --- 
To unsubscribe: 
echo "unsubscribe rtl" | mail majordomo@rtlinux.org OR 
echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.org 
--- 
For more information on Real-Time Linux see: 
http://www.rtlinux.org/rtlinux/ 
 
-- 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.137.7] 

BBS水木清华站∶精华区