qemu-system-i386 -hda linux-0.2.img
$ cp /home/staff/islene/public_html/mc504-linux.tar.xz .
$ tar xJvf mc504-linux.tar.xzSurgirá um diretório contendo a versão 3.17.2 do kernel Linux contendo um arquivo .config adequado para o experimento. Alé disso, iremos trabalhar com a imagem mc504.img que foi criada por Glauber de Oliveira Costa para a turma do 1s2008 de sistemas operacionais.
$ cd linux-3.17.2 $ make -j 5 ARCH=i386Para não ter problemas com a quota, configure previamente o diretório CCACHE utilizando o comando:
$ export CCACHE_DIR="/tmp/.ccache"
$ qemu-system-i386 -hda mc504.img -kernel linux-3.17.2/arch/i386/boot/bzImage -append "ro root=/dev/hda"
usuário: root senha: root
357 i386 mycall sys_mycall
asmlinkage long sys_mycall(void);
#include <linux/unistd.h> #include <linux/linkage.h> asmlinkage long sys_mycall(void) { return(4096); }
obj-y += mycall.o
$ make -j 5 ARCH=i386
/* * Teste da nova chamada de sistema */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { int r = syscall(357); printf("Retorno da chamada de sistema: %d.\n", r); return r; }
$ gcc -m32 -static ex-mycall.c -o ex-mycallEsta opção não está configurada em todas as máquinas do laboratório. A máquina bugu acessível via ssh está devidamente configurada.
Devemos tornar o executável disponível no ambiente do QEMU.
$ qemu-system-i386 -hda mc504.img -kernel linux-3.12/arch/i386/boot/bzImage \ -append "ro root=/dev/hda" -hdb ex-mycall
Após logar no sistema, devemos executar:
$ cat /dev/hdb > ex-mycall $ chmod +x ex-mycall $ ./ex-mycall
$ dd if=/dev/zero of=exec.dmp bs=1k count=4000 $ mkfs.ext2 exec.dmp $ debugfs -w exec.dmp debugfs: write ex-mycall ex-mycall debugfs: quit $ qemu-system-i386 -hda mc504.img -kernel linux-3.17.2/arch/i386/boot/bzImage \ -append "ro root=/dev/hda" -hdb exec.dmp
Após logar no sistema, devemos executar:
$ mkdir exec $ mount -t ext2 /dev/hdb exec $ ./exec/ex-mycall
Por que as funções como get_user e put_user ou copy_to_user e copy_from_user são necessárias? Veja a introdução User space memory access from the Linux kernel. Versão em português: Acesso à memória do espaço do usuário a partir do kernel Linux.