Estoy interesado en modificar los componentes internos del núcleo, aplicar parches, manejar controladores de dispositivos y módulos, para mi propia diversión personal.
¿Existe un recurso integral para hackear kernel, destinado a programadores experimentados?
linux
kernel
linux-kernel
Adam Matan
fuente
fuente
Respuestas:
Un viaje de mil millas de código debe comenzar con un solo paso. Si está confundido acerca de con cuál de los siguientes libros comenzar, no se preocupe, elija uno de su elección. No todos aquellos que divagan están perdidos. Como todos los caminos finalmente se conectan a la autopista , explorará cosas nuevas en su viaje del kernel a medida que las páginas progresen sin encontrar ningún callejón sin salida, y finalmente se conectará al
code-set
. Lea atentamente y recuerde: el código no es literatura .Lo que queda no es una cosa o una emoción o una imagen o una imagen mental o un recuerdo o incluso una idea. Es una funcion. Un proceso de algún tipo. Un aspecto de la vida que podría describirse como una función de algo "más grande". Y por lo tanto, parece que en realidad no está "separado" de esa otra cosa. Al igual que la función de un cuchillo, cortar algo, no está, de hecho, separado del cuchillo en sí. La función puede o no estar en uso en este momento, pero posiblemente NUNCA esté separada.
Algoritmo desrandomizado Solovay Strassen para prueba de primalidad :
Leer para no contradecir y confutar; ni creer y dar por sentado; ni encontrar conversación y discurso; pero pesar y considerar. Algunos libros deben probarse, otros deben tragarse y algunos pocos deben ser masticados y digeridos: es decir, algunos libros deben leerse solo en partes, otros deben leerse, pero no con curiosidad, y algunos pocos deben leerse por completo , y con diligencia y atención.
Reader debería estar bien versado en conceptos de sistemas operativos ; una comprensión justa de los procesos de larga ejecución y sus diferencias con procesos con breves ráfagas de ejecución; tolerancia a fallas mientras se cumplen restricciones de tiempo real blando y duro. Mientras lee, es importante comprender y
n/ack
las elecciones de diseño realizadas por la fuente del kernel de Linux en los subsistemas centrales.Hilos [y] señales [son] un rastro de miseria, desesperación, horror y locura dependiente de la plataforma (~ Anthony Baxte). Dicho esto, debe ser un experto en autoevaluación de C, antes de sumergirse en el núcleo. También debe tener una buena experiencia con Listas vinculadas, pilas, colas, árboles rojos negros, funciones hash, etc.
La belleza y el arte de la fuente del kernel de Linux radica en la ofuscación deliberada del código que se utiliza. Esto a menudo es necesario para transmitir el significado computacional que involucra dos o más operaciones de una manera limpia y elegante. Esto es especialmente cierto cuando se escribe código para arquitectura de múltiples núcleos.
Video conferencias en sistemas de tiempo real , programación de tareas , compresión de memoria , las barreras de memoria , SMP
Su tarea es básicamente establecer una interfaz de comunicación de alta velocidad entre el dispositivo de hardware y el núcleo del software. Debe leer la hoja de datos / manual de referencia de hardware para comprender el comportamiento del dispositivo y sus estados de control y datos y canales físicos proporcionados. El conocimiento de ensamblaje para su arquitectura particular y un conocimiento justo de los lenguajes de descripción de hardware VLSI como VHDL o Verilog lo ayudarán a largo plazo.
P : Pero, ¿por qué tengo que leer las especificaciones de hardware?
R : Porque, "Hay un abismo de carbono y silicio que el software no puede salvar" - Rahul Sonnad
Sin embargo, lo anterior no representa un problema para los Algoritmos Computacionales ( código del controlador - procesamiento de la mitad inferior ), ya que puede simularse completamente en una máquina universal de Turing . Si el resultado calculado es cierto en el dominio matemático , es cierto que también es cierto en el dominio físico .
Conferencias de video sobre controladores de dispositivos Linux (Lec. 17 y 18), Anatomía de un controlador KMS incorporado , Control de pin y actualización GPIO , Common Clock Framework , Escribir un controlador real de Linux - Greg KH
Entender un recorrido de paquetes en el núcleo es una clave para comprender la red del núcleo. Comprenderlo es imprescindible si queremos entender Netfilter o IPSec internos, y más. Las dos estructuras más importantes de la capa de red del kernel de Linux son:
struct sk_buff
ystruct net_device
Brian W. Kernighan, en el documento Unix para principiantes (1979) dijo: "La herramienta de depuración más eficaz sigue siendo un pensamiento cuidadoso, junto con declaraciones impresas juiciosamente colocadas". Saber qué recopilar le ayudará a obtener los datos correctos rápidamente para un diagnóstico rápido. El gran científico informático Edsger Dijkstra dijo una vez que las pruebas pueden demostrar la presencia de errores pero no su ausencia. Las buenas prácticas de investigación deben equilibrar la necesidad de resolver problemas rápidamente, la necesidad de desarrollar sus habilidades y el uso efectivo de expertos en la materia.
Hay momentos en que tocas fondo, nada parece funcionar y te quedas sin todas tus opciones. Es entonces cuando comienza la verdadera depuración. Un error puede proporcionar el descanso que necesita para desconectarse de una fijación en la solución ineficaz.
Conferencias de video sobre depuración y creación de perfiles de kernel , análisis de volcado de núcleo , depuración multinúcleo con GDB , control de condiciones de carrera multinúcleo , depuración electrónica
En un sistema UNIX, todo es un archivo; Si algo no es un archivo, es un proceso, a excepción de las tuberías y sockets con nombre. En un sistema de archivos, un archivo está representado por un
inode
tipo de número de serie que contiene información sobre los datos reales que componen el archivo. El sistema de archivos virtual de LinuxVFS
almacena en caché la información en la memoria de cada sistema de archivos a medida que se monta y se utiliza. Se debe tener mucho cuidado para actualizar el sistema de archivos correctamente ya que los datos dentro de estos cachés se modifican a medida que se crean, escriben y eliminan archivos y directorios. El más importante de estos cachés es el Buffer Cache, que está integrado en la forma en que los sistemas de archivos individuales acceden a sus dispositivos de almacenamiento de bloques subyacentes.Conferencias de video sobre sistemas de almacenamiento , sistema de archivos amigable con Flash
La criptografía forma la base de la confianza en línea. Hackear es explotar los controles de seguridad, ya sea en un elemento técnico, físico o humano. Proteger el kernel de otros programas en ejecución es un primer paso hacia un sistema seguro y estable, pero obviamente esto no es suficiente: también debe existir cierto grado de protección entre diferentes aplicaciones de usuario. Los exploits pueden apuntar a servicios locales o remotos.
Conferencias de video sobre criptografía y seguridad de red , espacios de nombres para seguridad , protección contra ataques remotos , Linux embebido seguro
Puede que no pienses que los programadores son artistas, pero la programación es una profesión extremadamente creativa. Es la creatividad basada en la lógica. La educación en ciencias de la computación no puede convertir a nadie en un programador experto, del mismo modo que estudiar pinceles y pigmentos no puede hacer que alguien sea un pintor experto. Como ya sabes, hay una diferencia entre conocer el camino y recorrerlo; Es de suma importancia arremangarse y ensuciarse las manos con el código fuente del núcleo. Finalmente, con su conocimiento del núcleo así adquirido , donde quiera que vaya, brillará .
Los codificadores inmaduros imitan; codificadores maduros roban; los codificadores malos desfiguran lo que toman, y los codificadores buenos lo convierten en algo mejor, o al menos en algo diferente. El buen codificador suelda su robo en una sensación única, completamente diferente de la que se desgarró.
Conferencias de video sobre recetas de kernel
Linux_source_dir/Documentation/*
fuente
Linux Kernel Newbies es un gran recurso.
fuente
Le sugiero que lea " Linux Kernel in a Nutshell ", de Greg Kroah-Hartman y " Understanding the Linux Kernel ", de Robert Love. Debe leer :)
fuente
Linux Device Drivers es otro buen recurso. Te daría otra forma de entrar en el funcionamiento interno. Del prefacio:
fuente
Ver El Proyecto de Documentación de Linux . En particular, la "Guía del módulo del kernel de Linux".
fuente
Linux Kernel 2.4 Internals es otro recurso en línea para mirar. Parece adoptar un enfoque bastante "básico", comenzando con el arranque. Aquí el TOC:
Y, para hacerlo aún más dulce, hay una nueva Tercera Edición de Linux Kernel Development de Robert Love y Slashdot tiene una revisión.
fuente
Comience con Linux Kernel Primer por Claudia Salzberg et al. Buena para empezar para principiantes. El libro de Robert Love definitivamente no es el libro con el que los principiantes deberían comenzar. El último libro está por encima del nivel intermedio.
fuente