Escolar Documentos
Profissional Documentos
Cultura Documentos
had
Trabalho prático Nº 1
Data de inicialização do sistema
1 Objectivo
Desenvolva um módulo para o kernel 2.6.35, chamado uptime.c, que instala uma chamada ao
sistema que retorna os segundo passados desde a inicialização do sistema, e um cliente no espaço de
utilizador, bootdate.c, que efectuando essa chamada imprima a data correspondente à inicialização
do sistema, de acordo com o especificado abaixo.
O módulo será testado por um script que indicará erro no trabalho se as especificações não
forem seguidas textualmente.
2 Especificações:
2.1 Nomes dos ficheiros
Nome do ficheiro com o código fonte do módulo: uptime.c
Nome do ficheiro com o módulo compilado: uptime.ko
Nome do ficheiro com o código fonte do cliente: bootdate.c
Nome do ficheiro com o cliente compilado: bootdate
Nome do ficheiro para gerar o código (fornecido com o enunciado): Makefile
Script para inserir o módulo (fornecido com o enunciado): insert.sh
Script para teste do módulo (fornecido com o enunciado): test.sh
Comando para imprimir a data de inicialização (fornecido com o enunciado): checkBootDate.sh
Módulo para ocupar entradas não usadas na tabela de chamadas ao sistema (fornecido com o
enunciado): rndusesyscalls.ko
Este parâmetro deve ter o valor por defeito 0 e permissões apenas de leitura no sistema de ficheiros
virtual /sys: 0444.
Se este parâmetro for omitido ou nulo, a rotina de inicialização do módulo não deverá permitir a sua
inserção retornando –EINVAL e imprimindo no registo do kernel: "System call table address can
not be NULL\n".
Nota: o script deve ter permissões de execução. Para isso poderá ser usado na linha de comandos:
chmod +x insert.sh
/sys/kernel/system_call_numbers/uptime
e enviar para o espaço de utilizador através de useradr o número de segundos desde que o sistema
foi inicializado (arredondado para cima), que podem ser calculados com:
ktime_get_ts (&tp);
monotonic_to_bootbased(&tp);
return tp.tv_sec + (tp.tv_nsec ? 1 : 0); //arredonda para cima
cat /proc/uptimeseconds
o número de segundos desde que o sistema foi inicializado deve ser calculado, da mesma forma que
na implementação da chamada ao sistema, função uptime(), e impressos na saída padrão.
/sys/kernel/system_call_numbers/uptime
por exemplo com: fscanf (…, &syscallnum), efectuar a chamada ao sistema para obter o número
de segundos desde que o sistema foi inicializado:
Repare-se que para obter a data de inicialização do sistema é necessário determinar o tempo
corrente em segundos, por exemplo com time (NULL), subtrair os segundos passados desde a
inicialização (secsinceboot), e então imprimir a data de inicialização com ctime().
3 Entrega:
Até ao prazo limite deve ser entregue num ficheiro compactado todo o código fonte que responda
ao enunciado, incluindo um ficheiro Makefile para compilar o módulo:
http://www.deei.fct.ualg.pt/PIn/Entregas/
Não esquecer de indicar o turno, grupo, nome, número e curso dos autores do trabalho em TODOS
OS FICHEIROS.
4 Bibliografia
Capítulos 1, 2 e da matéria teórica de Periféricos e Interfaces e slides correspondentes.