2009-09-30 26 views
6

Estoy haciendo algo de desarrollo de kernel de Linux, y estoy tratando de usar Netbeans. A pesar del apoyo declarado para los proyectos de C basados ​​en Make, no puedo crear un proyecto de Netbeans totalmente funcional. Esto a pesar de compilar que Netbeans analice un kernel binario que se compiló con información de depuración completa. Los problemas incluyen:Configuración de Netbeans/Eclipse para Linux Kernel Development

  • archivos están excluidos erróneamente: Algunos archivos están en gris de forma incorrecta en el proyecto, lo que significa Netbeans no cree que deberían ser incluidos en el proyecto, cuando en realidad son compilados en el kernel. El principal problema es que Netbeans omitirá cualquier definición que exista en estos archivos, como estructuras de datos y funciones, pero también omitirá las definiciones de macro.
  • no se encuentran las definiciones: Bastante autoexplicativo: muchas veces, Netbeans no puede encontrar la definición de algo. Esto es en parte un resultado del problema anterior.
  • no puede encontrar los archivos de cabecera: no requiere aclaración

Me pregunto si alguien ha tenido éxito con la creación de Netbeans para el desarrollo del núcleo Linux, y si es así, ¿qué valores se utilizan. En última instancia, estoy buscando Netbeans para poder analizar el Makefile (preferido) o extraer la información de depuración del binario (menos deseable, ya que esto puede ralentizar significativamente la compilación), y determinar automáticamente qué archivos se compilan realmente y cuáles las macros en realidad están definidas. Luego, en base a esto, me gustaría poder encontrar las definiciones de cualquier estructura de datos, variable, función, etc. y completar la autocompletación.

déjame aclarar esta cuestión con algunos puntos:

  • No estoy interesado en soluciones que implican Vim/Emacs. Sé que a algunas personas les gustan, pero yo no soy uno de ellos.
  • Como el título sugiere, yo también sería feliz de saber cómo set-up Eclipse para hacer lo que necesito
  • Aunque yo preferiría una cobertura perfecta, algo que sólo pierde uno en un millón de definiciones obviamente bien

La útil función "Preguntas relacionadas" de SO me ha informado que la siguiente pregunta está relacionada: https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development. Al leerlo, la pregunta es más una comparación entre IDE, mientras que estoy buscando cómo configurar un IDE en particular. Aun así, el usuario Wade Mealing parece tener cierta experiencia en el trabajo con Eclipse en este tipo de desarrollo, por lo que ciertamente apreciaría sus respuestas (y por supuesto todas sus).

Saludos

Respuesta

0

que han estado haciendo un poco de desarrollo Linux embebido. Incluyendo el desarrollo del módulo kernel e importado todo el código fuente del kernel de Linux en Eclipse, como un proyecto separado. He estado construyendo el kernel mismo fuera de Eclipse (hasta ahora), pero no tengo ninguna razón por la cual no pueda configurar el entorno de compilación dentro de Eclipse para construir el kernel. Para mis proyectos, siempre que configure las propiedades de PATH para que apunten a la fuente Linux apropiada, incluya directorios, parece ser bastante bueno sobre la finalización de nombres para campos de estructura, etc.

Realmente no puedo comentar, si está recogiendo las definiciones correctas y no encajando las secciones correspondientes, ya que realmente no le he prestado mucha atención a los archivos dentro del kernel mismo.(hasta ahora)

También me preguntaba sobre el uso de Netbeans como un IDE de Linux 'C', ya que prefiero el desarrollo de la GUI de Netbean para Java.

0

creo que esto funcionaría (hecho cada paso para varios proyectos):

[1] Modificar kernel build scr ipts para dejar archivos .d. Por defecto son eliminados. [2] Registre el proceso de compilación en un archivo. [3] Escribe una secuencia de comandos para analizar el registro de compilación. [3.1] Desde el registro de compilación, usted conoce cada archivo .c. [3.2] Del archivo .c, usted sabe cuál es el archivo .d correspondiente. [3.3] Busque archivos .d para encontrar todos los archivos .h incluidos. [3.4] Forme una lista completa de archivos .c y .h. [4] Ahora cree un nuevo directorio y use "ln -s" o "ln" para seleccionar archivos de su interés.

Ahora, cree un proyecto de Netbeans para el código fuente existente en [4]. Configure el código de asistencia para usar el archivo make-log. Debería ver exactamente el código fuente efectivo como cuando lo construye en [2].

Algunas explicaciones a los pasos anteriores:

En [2], hacer una acumulación real para el archivo de registro contiene los archivos exactos y banderas de interés. Los netbeans posteriores podrán usar las banderas exactas para analizar.

En [4], elija solo los archivos que desea ver. La incorporación de todo el árbol kernel en netbeans no será práctico.

Hay un truco para analizar archivos .d: Muchos de los elementos dependientes no son rutas reales a un archivo .h, son una entrada modificada para parte de las secciones de configuración de Linux en el archivo de configuración automática. Es posible que deba revertir la modificación para descubrir cuál es el archivo de encabezado real.

Actualmente hay un tema en el sitio netbeans. Esta es la url de discusión: http://forums.netbeans.org/ntopic3075.html. Y hay una página wiki vinculada a la discusión: wiki.netbeans.org/CNDLinuxKernel. Básicamente, le pide que haga un prefijo make con CFLAGS = "- g3 -gdwarf-2".

+0

Gracias por su consejo. Intenté algo similar con los archivos make-log, pero al final todavía presentaba los mismos problemas. Y el uso de esos CFLAGS que especificó sería un PITA porque aumenta mucho el tiempo de compilación. –

+0

Debería funcionar según la experiencia anterior. Le daría una oportunidad. Aunque algunos símbolos a veces faltan y aparecen nuevamente, esto es puramente un problema interno de Netbeans. – Minghua

+0

[Aquí] (https://github.com/minghuascode/Nbk/blob/master/note-nbkparse) Creé un script para generar el archivo make-log adecuado para que NetBeans lo lea e interprete desde el resultado archivos. Sí, necesitas modificar los makefiles de Linux para dejar los archivos dep. Funciona muy bien para mí (casi no faltan símbolos). Los pasos son un poco largos, pero una vez que lo hayas hecho, todo será sencillo. Desear esta ayuda – minghua

0

Encontré este enlace muy útil para configurar la indexación correcta en Eclipse. Se requiere la ejecución de un script para alterar entorno Eclipse para que coincida con sus opciones del núcleo, en mi caso

$ ./include/generated/autoconf.h autoconf-to-eclipse.py.

An illustrated guide to indexing the linux kernel in eclipse

2

anteriormente escribí una respuesta. Ahora se me ocurren todos los detalles de la solución y me gustaría compartirla. Desafortunadamente stackoverflow no me permite editar la respuesta anterior. Entonces lo escribo en esta nueva respuesta.

Implica unos pocos pasos.


[1] El primer paso es modificar las secuencias de comandos de Linux para dejar archivos dep. De forma predeterminada después de utilizarlas en la construcción, esos archivos se eliminan dep. Esos archivos dep contienen información de dependencia exacta sobre qué otros archivos depende un archivo C. Necesitamos que creen una lista de todos los archivos involucrados en una compilación. Por lo tanto, modificar los archivos bajo Linux-x.y.z/scripts para que sean de no eliminar los archivos dep así:

linux-3.1.2/scripts 

Kbuild.include: echo do_not_rm1 rm -f $(depfile); 
Makefile.build: echo do_not_rm2 rm -f $(depfile); 

Los otros pasos se detallan en mi código github archivo de proyecto https://github.com/minghuascode/Nbk/blob/master/note-nbkparse. Aproximadamente lo haces:

[2] Configura con tu método de configuración, pero asegúrate de usar la opción "O =" para compilar los archivos obj en un directorio separado.

[3] A continuación, utilice la misma opción "O =" y la opción "V = 1" para compilar Linux, y guarde la salida en un archivo.

[4] Ejecutar mi script nbkparse del proyecto github anterior. Lo hace: [4.1] Leer en el archivo de registro de make y los archivos dep. Genera un comando de reflejo. [4.2] Ejecute el comando de duplicación para vincular los archivos fuente relevantes en un árbol separado y genere un archivo make-log para NetBeans.


Ahora cree un proyecto NetBeans C utilizando el árbol fuente duplicado y el archivo de registro generado. NetBeans debería poder resolver todos los símbolos del kernel. Y solo verá los archivos involucrados en la compilación.