...alcortes@coitt.es1
Por favor, informadme de la versión de los apuntes que estáis utilizando.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... asignatura1.1
Sobre todo en lo que concierne a programación de módulos del Kernel.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... Linux1.2
Son necesarios conocimientos básicos de C para esta asignatura.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... libre1.3
es decir, de código abierto
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ESCRITURA1.4
para borrar o modificar un fichero se necesita permisos de escritura sobre él.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... lío1.5
en breve se describirá como cambiar los permisos de los archivos (sección 1.2.2).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... diferencias1.6
nótese por ejemplo que la barra de separación de directorios en Linux es / no $ \backslash$
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...home1.7
directorio raiz de una cuenta.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... raiz1.8
cd a secas te sitúa siempre en el directorio home.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ésta1.9
Es necesario montar la disquetera antes de trabajar con ella y ACORDARSE de desmontarla antes de sacar el disquete; si no nadie te asegura que los cambios que hayas hecho en ella se han hecho efectivos.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... disquete:1.10
nótese que en Linux los nombres de ficheros no tienen por qué tener la forma *.???
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...xemacs 1.11
Para los no iniciados se recomienda primero leer el tutorial de utilización al que se hace referencia en la pantalla de presentación (o con ``Control+h T'')
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... \space1.12
como siempre, si se necesita ayuda sobre el gcc, se puede usar man e info, suerte ¡glup!.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... buscador1.13
Uno especialmente rápido e indicado para estos temas es el google: http: $ \backslash\backslash$www.google.com
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...bash2.1
Cuidado, esto crea un nuevo proceso bash para correr el script.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... quiera2.2
Nótese la diferencia con los shell scrpits.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... defecto2.3
Valor de la variable IFS.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... 02.4
El parámetro posicional 0 es el nombre del script.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... (falso)2.5
no siempre, ver diff
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... falsa2.6
Se puede convertir cualquier while en un until y viceversa sin más que negando la condición
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...echo2.7
Nota Importante acerda de echo: El comando echo sustituye el IFS por espacios, lo cual puede dar lugar a confusiones. Si un echo no te muestra lo que debería comprueba el valor de IFS, puede que ese sea el problema
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... shell3.1
La bash, por ejemplo.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... importantes3.2
para ver una lista completa de las macros internas, las reglas de dependencia internas y algunos otros comportamientos por defecto de make ejecutar: $ make -p -f/dev/null
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... teclear3.3
también se pueden ver de esta manera las macros internas y otros aspectos del comportamiento por defecto de nuestra versión de make
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... nota4.1
Es buena practica el incluir, junto con tus programas, scripts de pruebas de los mismos, da buena impresión al profesor y le ayuda en la corrección.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...mi_fich4.2
supongamos que está en el disco duro conectado como maestro, de la controladora primaria IDE, en su segunda partición (es decir el dispositivo /dev/hda2)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...mknod4.3
es necesario tener permisos de root para ejecutar este comando.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... exista!4.4
ver sección 4.2.2, pág. [*]
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...módulos4.5
en este momento es aconsejable que el alumno le eche un vistazo a /linux/module.h, de esta manera se familiarizará con la manera en que se definen macros y se declaran cabeceras en el kernel de Linux, también se podrá comprobar de esta manera la importancia de predefinir __KERNEL__ y MODULE antes de nada.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... kernel4.6
Será necesario preguntar al profesor de la asignatura donde están las cabeceras del kernel sobre el que se va a programar, en este manual, los ejemplos están hechos para un kernel 2.2.17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... /var/log/messages4.7
No es mala idea que de ahora en adelante, se mantenga un terminal con un tail -f /var/log/messages, para que puedan verse los mensajes del kernel según aparezcan.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... sitio4.8
Quizás esto le parezca una pérdida de tiempo a algunas personas, pero eso es por que nunca han programado un driver, si tu no usas habitualmente la opción -Wall incluso para tus programas más simples, ¡deberías empezar a hacerlo!.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... exportadas4.9
Aquellos que consulten [9], verán que para los kernels 2.0, exportar tus propios símbolos era bastante más complicado.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Documentation/devices.txt4.10
El directorio Documentation es un subdirectorio del directorio raíz de los fuentes del kernel.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... mayor4.11
De ahora en adelante las descripciones que en este texto se dan de las funciones del kernel serán muy escuetas, es fundamental que el alumno busque en las fuentes del kernel la definición de la función que está manejando, al igual que cuando usa una función de la libc, se mira su página de manual, para ver sus parámetros, lo que devuelve y lo que hace. Existen muchas herramientas para buscar esta información, una de las mejores es el uso de las etags , con las que el alumno debe familiarizarse o morir en el intento de buscar funciones por el kernel. Por esta vez y sin que sirva de precedente, daremos las coordenadas de esta función: /fuentes_del_kernel/fs/devices.c, linea 121.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...file4.12
ver sección 4.2.2 para una descripción de la estructura file.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... kernel4.13
ver man rmmod.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...linux/kdev_t.h4.14
Es muy interesante leerse entero este fichero
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... problema?4.15
Una pista: usar strace dd if=/dev/mi_cinta0 of=/tmp/salida ibs=1 count=10.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... local4.16
Este puntero puede ser declarado por nosotros mismos en cada función o podemos aprovechar file-$ >$private_data (ver estructura file, sección 4.2.2, pág. [*]) por ejemplo, que es distinto para cada proceso. En los ejemplos de este manual hemos optado por la primera solución, aunque en realidad ambas estrategias son la misma cosa.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... mismos4.17
Esta política consiste en suponer que si un usuario nos a pedido los datos que están en un determinado bloque, es muy posible que en breve nos pida los del siguiente bloque, por lo que ahorramos tiempo si en vez de pedirle al driver solo un bloque le pedimos unos cuantos, de esta manera los datos ya estarán leídos para cuando el usuario necesite mas información. El driver no tendrá que proporcionárselos, pues ya se los ha pasado al kernel anteriormente. Para dispositivos lentos (i.e. disco duro) es necesario altos readaheads, para dispositivos rápidos (memoria), esto no es tan crítico.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.