Comunidad de Programadores
Iniciar sesión
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Recordar contraseña?
Iniciar sesión
Crear cuenta
Documentación y Recursos
Cursos y Manuales
Biblioteca de Temas
Código Fuente
Noticias/Artículos
PDFs de programación
Foros y Consultas
Foros de Consulta
Chats de prog.
Tablón de Notas
Diccionario informático
Programadores
Programadores
Ofertas de Trabajo
Programas
Programas/Utilidades
Nuestros Programas
Iconos y Cursores
Preguntas/Respuestas
Otros
Utilidades
Colaboradores
Encuestas/Estadísticas
Contactar
LWP
»
PDFs de programación
»
gimp
» Construyendo un kernel en linux
PDF de programación - Construyendo un kernel en linux
Volver
Filtrado por el tag: gimp
<<
>>
Construyendo un kernel en linux
Publicado el 10 de Agosto del 2018
981 visualizaciones desde el 10 de Agosto del 2018
1,9 MB
14 paginas
Construyendo un kernel en
linux
Por qué recompilar el
kernel
n Modificar el modelo predefinido
n Cambiar la frecuencia del timer
n Agregar un parche (patch)
n Agregar System calls personalizadas
Agregar nfsgroups patch
n Este parche permite “eliminar” la restricción del protocolo
NFS/RPC la cual permite a cada usuario sólo pertenecer a 16
grupos.
n En Linux el límite es 32
Agregar el patch y construir el
nuevo conjunto de paquetes
n Crea el directorio donde se generarán los paquetes del kernel
como usuario norma e instalar todos los paquetes necesarios
apt-get install fakeroot build-essential devscripts kernel-package!
apt-get build-dep linux !
n Obtener los fuentes del paquete. Es necesario agregar los
repositorio deb-src en /etc/apt/sources.list
apt-get source linux!
cd linux-*!
n También es posible obtener los fuentes del kernel
descargándolos directamente de https://lists.debian.org/
debian-kernel/
Agregar el patch y construir el
nuevo conjunto de paquetes
n Obteren las fuentes del parche
cd linux-*!
svn export svn://svn.debian.org/svn/kernel/dists/
trunk/linux/debian!
Agregar el patch y construir el
nuevo conjunto de paquetes
n Aplicar el patch. En el directorio de los fuentes
zcat patch46.gz | patch -p0 !
o bien
n
patch –p0 < patch46 !
Opcional: si no es el primer intente de recompilar ejecutar
make –f debian/rules clean!
Agregar el patch y construir el
nuevo conjunto de paquetes
n Verificar que los parches funcionan y resolver conflictos
make -f debian/rules source-all!
en el primer intento el objetivo falla, ejecutar dos veces
n Configurar el kernel
make menuconfig #es necesario tener instalado ncurses-dev
!!
n Compilar
fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image!
Agregar el patch y construir el
nuevo conjunto de paquetes
n Instalar su nuevo kernel
dpkg -i ../linux-image-3.16-subarchitecture_custom.1.0_i386.deb!
n dpkg –i instala algunas paquetes adicionales y configura el
bootloader
n Si se crearon modulos de paquetes adicionales también es
necesario instalarlos
n Reiniciar el sistema
shutdown –r now!
Agregar un sysmtem call al
kernel
n Recuerde como opera un system call
Agregar un sysmtem call al
kernel
n Los id asociados con cada system call en muchas
distribuciones de Linux están listados en (x86 es la
arquitectura del ejemplo) :
Linux-3.x/arch/x86/include/asm/unistd_32|64.h!
n Los lista de punteros asociados con cada system call
en muchas distribuciones de Linux están en:
linux-3.x/arch/x86/kernel/syscall_table_32|64.S!
Agregar un sysmtem call al
kernel
n Ahora podemos agregar un sytem call al kernel. Se
utiliza el API de C.
#include <linux/linkage.h>!
#include <linux/kernel.h>!
!
asmlinkage int sys_helloworld(){!
printk(KERN_EMERG ’’hello world’);!
return 1;!
}!
n Definir una nueva entrada en unistd.h para
__NR_helloworld e incrementar __NR_syscalls
#define __NR_helloworld 312!
!
#define __NR_syscalls 313!
Agregar un sysmtem call al
kernel
n Incluir en el archivo syscall_table la linea
.long sys_helloworld!
n Definir una nueva entrada en syscalls.h
asmlinkage long sys_helloworld(void);!
Agregar un sysmtem call al
kernel
n Crear un directorio hello en el directorio raíz de los fuentes
n En ese directorio crear el procedimento para le system
call.
#include <linux/linkage.h>!
#include <linux/kernel.h>!
!
asmlinkage int sys_helloworld(){!
printk(KERN_EMERG ’’hello world’);!
return 1;!
}!
n Crear un Makefile en hello con el siguiente contenido:
obj-y: helloworld.o!
n Agregar a core-y del Makefile principal el directorio hello
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/!
Utilizar el system call
n Después de reiniciar.
#include <linux/errno.h>!
#include <sys/syscall.h>!
#include<linux/unistd.h>!
!
#define __NR_helloworld 349!
!
long int helloworld(void){!
return syscall(__NR__helloworld);!
}!
Int main(){!
int output =helloworld();!
return 0;!
}!
n La ejecución del programa agregará una entrada “hello
world” en /var/log/messages.log
Links de descarga
http://lwp-l.com/pdf12943
Comentarios de: Construyendo un kernel en linux (0)
No hay comentarios
Comentar...
Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
Cerrar
Cerrar
Cerrar
Cerrar
Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.
Puedes registrarte o validarte desde
aquí
.
Es necesario revisar y aceptar las políticas de privacidad
Acepto las
políticas de privacidad
Tags:
api
linux
svn
Linux WWW Como
Comentarios de: Construyendo un kernel en linux (0)
No hay comentarios