Curso Programación Linux
Jose A. Espinosa
Indice
● AREA 1: Programación Linux
● AREA 2: Optimización
● AREA 3: El núcleo
AREA 1: Programación Linux
● Introducción
● Entornos de programación
● Multitarea, multihilo
● Programación gráfica
● Intercomunicación
● Compilación cruzada
Introducción
25 de agosto de 1991, 20:57:08 GMT comp.os.minix
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to
work. This implies that I'll get something practical within a few
months, and I'd like to know what features most people would want.
Any suggestions are welcome, but I won't promise I'll implement them
:-)
Linus Benedict Torvalds (
[email protected])
PS. Yes – it's free of any minix code, and it has a multi-threaded
fs. It is NOT portable (uses 386 task switching etc), and it probably
never will support anything other than AT-harddisks, as that's all I
have :-(.
Y al principio fue UNIX...
● Sistema operativo
● Portable
● Multiusuario
● Multitarea
● 99% escrito en c
De UNIX a Linux
● 1966: MULTICS
● 1973: Porting a C del núcleo de UNIX
● 1982: System III (primer unix comercial)
● 1983: System V
● 1987: Minix
● 1990: IEEE 1003 : POSIX.1
● 1991: Linux
Prehistoria Linux
Y Linux es...
Arquitectura Básica
¿Qué es una distribución?
● Selección de paquetes que acompañan a
una cierta versión del núcleo linux
● Un sistema de paquetes (rpm, deb, etc.)
● Unos repositorios de paquetes
● Unas políticas de mantenimiento y
actualización.
● Unas plataformas hw soportadas
● OBJETIVO: facilidad de instalación y
mantenimiento
Distribuciones
Compilación en Unix
● Editores
● Compiladores
● Utilidades
● Entornos
Editores
● Empecemos por lo básico: vi
● Está presente en todos los unix (o variantes)
● Es independiente del terminal
● Existente en unix desde 1983 (Unix System
V)
● Se controla exclusivamente con el teclado
● Pero... Hay que aprender los comandos
vi
● Modo Texto
ESC
● Modo Comando
Insertar antes del cursor.
Insertar al principio de la línea.
Añadir después del cursor.
Añadir al final de la línea.
Abrir línea debajo de la actual.
Abrir línea encima de la actual.
Sobreescribir (cambiar) texto.
Sobreescribir el carácter sobre el que
Reemplaza caracteres.
i
I
a
A
o
O
R
r
está el cursor.
c
cw Reemplaza palabras.
C, c$
Reemplaza hasta el fin de línea.
c0 Reemplaza desde el comienzo de línea.
Mover en distintas direcciones.
Una posición hacia la izquierda.
Una posición hacia la derecha.
Una línea hacia arriba.
Una línea hacia abajo.
flechas
h ó BS
l ó SP
k ó -
j ó +
$
0 (Cero) Principio de línea.
1G
G
18G
Ctrl-G
w
e
E
de espacio.
b
^
%
H
L
M
23|
Ctrl-f
Ctrl-b
Ctrl-l
Ctrl-d
Ctrl-u
Fin de línea.
Comienzo del archivo.
Fin del archivo.
Línea número 18.
Mostrar número de línea actual.
Comienzo de la palabra siguiente.
Fin de la palabra siguiente.
Fin de la palabra siguiente antes
Principio de la palabra anterior.
Primera palabra de la línea.
Hasta el paréntesis que aparea.
Parte superior de la pantalla.
Parte inferior de la pantalla.
Al medio de la pantalla.
Cursor a la columna 23.
Una pantalla adelante.
Una pantalla atrás.
Refrescar la pantalla.
Media pantalla adelante.
Media pantalla atrás.
vi
● Modo EX
Salir si no hubo cambios.
:q
Salir sin guardar cambios.
:q!
Guardar cambios.
:w
:w arch1 Guardar cambios en archivo arch1.
Guardar cambios y salir.
:wq
:r arch2 Insertar un archivo.
:e arch2 Editar un nuevo archivo.
:e! arch2 Idem sin salvar anterior.
:r! comdo Insertar salida de comando.
:shell
:.=
se halla en cursor.
Salir al shell (vuelve con exit).
Muestra el número de línea en que
● Mover
:1
Mueve a línea 1.
:15 Mueve a línea 15.
Mueve a última línea.
:$
● Busqueda
/str Buscar hacia adelante cadena 'str'.
?str Buscar hacia atrás cadena de 'str'.
n
se usó ?).
N
se usó ?).
fc
Fc
tc
Tc
;
,
inverso.
Buscar siguiente (si se usó /) o anterior (si
Buscar anterior (si se usó /) o siguiente (si
Buscar el siguiente carácter 'c' en la línea.
Buscar el anterior carácter 'c' en la línea.
Ir al carácter anterior al siguiente 'c'.
Ir al carácter posterior al precedente 'c'.
Repetir el último comando f, F, t, o T.
último comando f, F, t, o T en sentido
gcc
● GNU Compiler collection
● Front ends para distintos lenguajes:
– Ada
– C
– C++
– Fortran
– Java
– Objective-c / c++
A compilar...
● Crear un programa en c hola.c que saque
por pantalla la famosa: “hola mundo”
(usando el vi, p.ej.)
● Ejecutar el comando de compilación
– gcc hola.c
● Ejecutar el resultado
– ./a.out
● Si queremos que nos lo saque con otro
nombre:
– gcc hola.c -o hola
Ejemplo 2
● Escribir un programa en c que calcule y nos
imprima la raiz cuadrada de 25. Llamarlo
hello2.c
● Compilarlo...
● ...
● ¿Que ha fallado?
● Probar gcc -lm hello2.c
Las librerías
● En linux las librerías dinámicas se
encuentran en /usr/lib, /lib
● Se pueden especificar otras librerías por su
camino completo
● Se puede definir dónde encontrar las
librerías con LDD_LIBRARY_PATH
● Comando ldd para conocer las librerías de
las que depende
El ciclo de compilación
● Preprocesado
– gcc -E archivo.c
● Compilado
– gcc -c archivo.c
● Ensamblado
– gcc -S archivo.c
● Linkado
– gcc
Proyectos compuestos
● Dependencias
● Make
● IMake
● Autoconf
Dependencias
● Un proyecto puede tener
múltiples archivos, con
dependencias de archivos de
cabecera, librerías o archivos de
configuración
● Es altamente ineficiente
recompilar todos los archivos
cada vez que modificamos alguno
● Para evitarlo existen las
herramientas como make
make
● El comando make es un sistema para
construir codigo compilado, aunque se
puede utilizar para más cosas
● make necesita un archivo de configuracion
Makefile
● Se puede cambiar el archivo con la opción -f
● Un archivo Makefile se compone de reglas
objetivo: prerequisitos
comandos
Ejemplo Makefile
# Lincado
sample: main.o example.o
cc -o sample main.o example.o
echo sample: make complete
# Compilar las fuentes
main.o: main.c main.h
example.o: example.c defs.h
cc -c main.c
cc -c example.c
Distintos objetivos
# Objetivo principal
.PHONY: clean install
# Eliminar ejecutable y objetos
clean:
rm sample main.o example.o
echo clean: make complete
# Instalar el producto final
install:
cp sample /usr/local
echo install: make complete
Uso de variables
# archivos objeto
objects = main.o example.o
# Lincar objetos
sample: $(objects)
cc -o sample $(objects)
echo sample: make complete
# Compilar fuentes
main.o: main.c main.h
cc -c main.c
example.o: example.c defs.h
cc -c example.c
# Eliminar ejecutables y objetos
clean:
rm sample $(objects)
echo clean: make complete
Toques finales
# Compilador:
CC=gcc
objects = main.o example.o
# Regla por defecto
all:
sample
echo all: complatada a compilacion
sample: $(objects)
$(CC) -o $@ $+
# Regla general para compilar los .c a .o:
%.o:%.c
$(CC) -c $+
#Nos aseguramos de recompilar si cambian las cabeceras:
main.o: main.h defs.h
example.o: example.h defs.h
Vuestro turno
● Crear un programa que use 2 archivos
fuente y 2 archivos de cabecera
● Crear un archivo makefile para compilarlos
● Ejecutar el makefile varias veces (make)
modificando los archivos de uno en uno para
ver su efecto.
Más problemas
● Con make se pueden resolver dependencias
dentro de una plataforma
● ¿Cómo se resuelven dependencias para
compilar en varias plataformas?
● Característica de UNIX : portable
● Primer gran proyecto en experimentar el
problema: X-Windows
X-Windows
● A diferencia de ms-windows, el sistema
gráfico de UNIX no es parte del núcleo
● Utiliza un sistema cliente-servidor y el
paradigma de DISPLAY
● Las pantallas se pueden compartir para que
los clientes ejecuten aplicaciones en ellas.
● Los clientes y servidores son independientes
de la plataforma y compatibles.
X e Imake
● X window requería su compilación en
múltiples plataformas
● La complejidad del código y su extensión
hacían muy dificil mantener makefiles para
cada combinación de plataforma-hardware
● Se desarrolla imake para permitir compilar el
código de X-Window de la misma manera en
todas las plataformas
Funcionamiento Imake
● Ejemplo... ver fuentes
GNU Build System
● Desarrollado casi al tiempo que imake
● Pretende descentralizar el desarrollo de
configuraciones para distintas plataformas
● Conocido por autotools
● Comprende:
– Autoconf
– Automake
– Libtool
Autoconf
● Procesa los archivos configure.in o
configure.ac
● Genera un script llamado configure
● Está diseñado para ntentar salvar las
diferencias que existen entre distintos
sabores de Unix
● Autoconf incluye la herramienta Autoheader
que se usa para manejar los archivos de
cabecera de C.
Automake
● ayuda a crear archivos Makefile portables
● Toma como entrada un archivo Makefile.am
y lo transforma en un Makefile.in.
● Este, a su vez, es utilizado por Autoconf
para generar el archivo Makefile final.
Libtool
● Libtool ayuda a crear librerías estáticas y
dinámicas para varios Sistemas Operativos
Unix.
● Libtool abstrae el proceso de creación de las
librerías ocultando las diferencias entre los
distintos sistemas (entre GNU/Linux y Solaris
por ejemplo).
Proceso
Ejemplo – Autoconf I
● Creamos un directorio para nuestras fuentes
con esta estructura:
● hello
– src
● hello.c
● hello.h
Ejemplo – Autoconf II
● Creamos en hello el archivo
– Makefile.am
● Contenido:
– SUBDIRS=src
● Esto le indica los subdirectorios a los que ha
de bajar
Ejemplo – Autoconf III
● En el dir
Comentarios de: Curso Programación Linux - Introducción (0)
No hay comentarios