- ...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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...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:
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.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.