Programação de Sistemas



Documentos relacionados
Integração de Sistemas Embebidos MECom :: 5º ano

Desenvolvimento para Sistemas Embarcados (CEA 513) Sistema de Arquivos Raiz & Componentes do Kernel

Universidade Federal de Pernambuco Centro de Informática. Aluno: Anderson L. S. Moreira Orientador: Paulo R. R.

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

1 Introdução ao ambiente de trabalho Esta parte da ficha consiste num tutorial para introdução ao ambiente de trabalho utilizado nas aulas práticas.

Figura 01 Kernel de um Sistema Operacional

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Sumário. Introdução ao Universo Linux Parte I

Grupo I [4v] b. [0,6v] De que forma é que o escalonador do Linux tenta minimizar o impacto desta limitação?

Software de Telecomunicações. Ferramentas de protecção. Prof RG Crespo Software de Telecomunicações Protecção : 1/15

Programação de Sistemas

Conceitos básicos de programação

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Programação 2009/2010 MEEC

ACRONIS BACKUP AND RECOVERY 10 SERVER FOR LINUX

Programação por Objectos

Introdução aos Sistemas Operativos

Administração de Sistemas GNU/Linux

Introdução à Programação

3 Classes e instanciação de objectos (em Java)

Preparatório LPIC-1 Tópico 101

Programação por Objectos. Java

Java. Marcio de Carvalho Victorino

Introdução aos Sistemas Operacionais. Subsistema de Entrada e Saída

Extracto on Line Aplicação Local Guia do Administrador

Capítulo 4. Packages e interfaces

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Prof. Esp. Adriano Carvalho

FICHA DE ESPECIFICAÇÃO TÉCNICA. x PRODUTO PROCESSO DATA: 04/02/2013. PRODUTO: IcBox SUB-PRODUTO: DESCRIÇÃO: API DLL c++ (C++ builder e Delphi)

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

Mobile Business. Your sales on the move.

Introdução a POO. Introdução a Linguagem C++ e POO

Capítulo 8. Software de Sistema

Software Livre. Acesso ao código fonte Alterar o código fonte Redistribuir Utilizar como desejar

Desenvolvimento de programas em UNIX

INF 1005 Programação I

Programação de Sistemas

3.º e 4.º Anos de Escolaridade Competências Conteúdos Sugestões metodológicas Articulações

Fuctura Tecnologia Rua Nicarágua, 159 Espinheiro (81) /

PACWEB Módulo de Pesquisa MANUAL DO UTILIZADOR

Componentes de um Sistema de Operação

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

2 Configuração do Ambiente de Desenvolvimento

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Servidores Virtuais. Um servidor à medida da sua empresa, sem investimento nem custos de manutenção.

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

Algoritmos e Programação

Prof. Rossano Pablo Pinto Dezembro/2012 Versão 0.2 (em construção) Prof. Rossano Pablo Pinto - 1

Algoritmos e Programação Estruturada

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Conceitos Básicos sobre Programação Prática

Programação de Sistemas

Guia rápido do utilizador

FBV - Linguagem de Programação II. Um pouco sobre Java

Visão Geral de Sistemas Operacionais

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

Programação 2009/2010 MEEC MEAer

no Xenomai 2.5.x 1 Introdução ao desenvolvimento de aplicações de tempo real Aplicações Hardware Xenomai

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos,

5 Apresentando a linguagem C

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

Ambiente de trabalho. Configurações. Acessórios

FAQ s ELEVATION Express

RECOLHA DE INFORMAÇÃO DE REMUNERAÇÕES, SUPLEMENTOS E DOS PONTOS DECORRENTES DA AVALIAÇÃO DE DESEMPENHO

Orientação a Objetos

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Análises Geração RI (representação intermediária) Código Intermediário

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

2 SYSCALLs: O que são

ZS Rest. Manual Profissional. Instalação do Software. v2011

UNIDADE 2: Sistema Operativo em Ambiente Gráfico

Preparação: Verifique se a máquina virtual já está copiada em sua máquina Execute o VMWare Acesse o Linux com o usuário asa e senha aslinux12

Programando em C# Orientado a Objetos. By: Maromo

Laboratório de Programação. Prof. Oscar Luiz Monteiro de Farias

Manual de Administração Intranet BNI

3 Revisão de Software

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Componentes da linguagem C++

SISTEMAS OPERACIONAIS

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Acronis Backup & Recovery 10 Server para Linux. Update 5. Guia da Instalação

Sintaxe Básica de Java Parte 1

Data de Aplicação 2/04/2009

Aleph Manual de utilização do módulo de circulação e empréstimos

Desenvolvimento OO com Java Orientação a objetos básica

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

OneTouch ZOOM Pro Diabetes Management Software. Guia de Instalação. Procedimento de instalação

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Aula 1 Tipo Abstrato de Dados

Projeto de Software Orientado a Objeto

Integração de Sistemas Embebidos MECom :: 5º ano

Linguagens de Programação Aula 10

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Transcrição:

Programação de Sistemas Módulos do núcleo Programação de Sistemas Módulos : 1/15 Introdução (1) Desenvolvimentos do núcleo, como a criação de novos dispositivos, podem ser incorporados no Linux em duas formas: Compilar nova versão do núcleo e fazer o boot : pesado! (unica opção disponível até Linux 1.2) Criar um LKM ( Loadable Kernel Module ) e instalar com o sistema operativo a correr. Vantagens: erros não impedem carregamento do sistema operativo, depuração e alteração mais fáceis, núcleo mais leve, porque carregados apenas os módulos necessários, Interface fixa permite desenvolvimentos por equipas exteriores à GPL. Programação de Sistemas Módulos : 2/15

Introdução (2) Principais diferenças entre um módulo e um programa de utilizador a) Inicialização/Finalização Um módulo não é inicializado pela função main, mas por init_module.um módulo é finalizado obrigatoriamente pela função cleanup_module. b) Bibliotecas: os módulos não podem ser usadas bibliotecas do C (printf, ), mas têm à sua disposição funções do núcleo (printk, ) c) Os parâmetros não são passados como argumento de função, mas como directivas. d) Protecção: os programas de utilizador correm em modo protegido. O crash de um programa afecta apenas o processo a executar, mas num módulo pode levar ao shutdown do sistema operativo. Programação de Sistemas Módulos : 3/15 Formato Um módulo tem de possuir as seguintes componentes int init_module(void); void cleanup_module(void); Exemplo: // Executado na instalação // em sucesso, retornar 0 // Executado na retirada #include <linux/module.h> /* para todos os modulos */ #include <linux/kernel.h> /* para KERN_INFO */ MODULE_LICENSE("GPL"); int init_module(void){ printk(kern_info "Hello world!\n"); return 0; // valor distinto de 0 significa falha no init_module } void cleanup_module(void) { printk(kern_info "Goodbye world!\n"); } Programação de Sistemas Módulos : 4/15

Compilação (1) Módulos gerados de forma diferente dos programas de utilizador As funções de ambiente usadas (printf, ) não são válidas. Usar apenas as directivas em <linux/ > disponibilizadas no directório /usr/src/kernels/ uname -r /include). Mensagens enviadas apenas para o ficheiro /var/log/messages pela função printk(kern_info ); O módulo executável possui extensão.ko O ficheiro Makefile (nota: obrigatório M maiúsculo) deve conter as linhas obj-m := id.o module-objs := fich1.o fich2.o Ficheiro executável (na realidade possui extensão.ko) Ficheiros objecto gerados directamente a partir das fontes Programação de Sistemas Módulos : 5/15 Compilação (2) Geração executada pelo comando make -C /lib/modules/`uname -r`/build M=`pwd` modules Tipicamente são geradas as frases manitoba.ist.utl.pt> make -C /lib/modules/`uname -r`/build M=`pwd` modules make: Entering directory `/lib/modules/2.6.189-1.2798.fc-i686/build' CC [M] /home/rgc/linuxdriver/simple/hello-1.o Building modules, stage 2. MODPOST CC /home/rgc/linuxdriver/simple/hello-1.mod.o LD [M] /home/rgc/linuxdriver/simple/hello-1.ko módulo make: Leaving directory `/lib/modules/ 2.6.189-1.2798.fc-i686 /build' manitoba.ist.utl.pt> Programação de Sistemas Módulos : 6/15

Compilação (3) O núcleo possui uma única pilha de apenas 4KB, usada por todos os módulos. Logo, o programador deve minimizar as variáveis locais ao módulo. Código do núcleo não efectua operações em vírgula flutuante. Para o módulo aceder à informação do processo que está em execução, usar a variável task_struct *current. printk(kern_info Process is \ %s\ (pid %i)\n, current->comm, current->pid); Programação de Sistemas Módulos : 7/15 Gestão (1) Gestão feita pelo administrador do sistema por comandos instalados em /sbin insmod fich instala módulo no núcleo rmmod fich retira módulo do núcleo lsmod lista módulos instalados modinfo informação sobre um módulo (versão do núcleo e compilador, directivas MODULE_) Nota: comandos de instalação e eliminação de módulos são válidos apenas na secção de trabalho. Ex: extracto do ficheiro /var/log/messages com comandos insmod e rmmod Feb 2 18:08:39 manitoba kernel: Hello world! Feb 2 18:09:59 manitoba kernel: Goodbye world! Programação de Sistemas Módulos : 8/15

Gestão (2) O módulo fonte pode conter as seguintes directivas: MODULE_DESCRIPTION(" ") MODULE_VERSION(" ") MODULE_ALIAS(" ") MODULE_LICENSE Valores possíveis: "GPL" "GPL v2" "GPL and additional rights" "Dual BSD/GPL" "Dual MIT/GPL" "Dual MPL/GPL Proprietary" Programação de Sistemas Módulos : 9/15 Gestão (3) Para alterar módulos de forma permanente, usar comando /sbin/modprobe Os comandos de instalação/remoção passam a residir no ficheiro/etc/modprobe.conf asterix.ist.utl.pt> more /etc/modprobe.conf alias eth0 8139too alias snd-card-0 snd-via82xx Adição opções options snd-card-0 index=0 install snd-via82xx /sbin/modprobe --ignore-install sndvia82xx && /usr/sbin/alsactl restore >/dev/null 2>&1 : remove snd-via82xx { /usr/sbin/alsactl store >/dev/null 2>&1 : ; }; /sbin/modprobe -r --ignore-remove snd-via82xx alias usb-controller uhci-hcd Nome alternativo Programação de Sistemas Módulos : 10/15

Inserção de módulos no boot No arranque do Linux RedHat são carregados os módulos existentes em /lib/modules/`uname -r`/kernel/ Módulos correntes listados no ficheiro /proc/modules manitoba.ist.utl.pt> more /proc/modules lp 17033 0 - Live 0xd0b16000 autofs4 25413 2 - Live 0x12a20000 i2c_ec 9281 1 sbs, Live 0xd0a00000 i2c_i801 11853 0 - Live 0xd0888000 i2c_core 25537 2 i2c_ec,i2c_i801 Live 0xd0891000 button 10961 0 - Live 0xd0991000 battery a4405 0 - Live 0xd0923000 Em alternativa usar comando lsmod Endereço base Estado (Live, Loading ou Unloading) Módulos que acedem Identificador Dimensão (B) Instâncias o módulo corrente Programação de Sistemas Módulos : 11/15 Parâmetros (1) Módulos não possuem main(). Parâmetros são declarados por directivas module_param(var,type,access) Tipos podem ser: bool, invbool (valor booleano invertido), charp (ponteiro para string), int, uint (inteiro sem sinal), short, ushort, long, ulong Os acessos podem ser: S_IRUGO (apenas leitura), S_IRUGO S_IWUSR (leitura e escrita). Definições em /lib/modules/ uname r /build/include/linux/stat.h O módulo deve importar o ficheiro de definições #include <linux/moduleparam.h> Parâmetros dados na linha de comando insmod na forma insmod fich par=val Programação de Sistemas Módulos : 12/15

Parâmetros (2) Exemplo: #include <linux/moduleparam.h> /* para parâmetros */ static int howmany = 1; module_param(howmany, int, S_IRUGO); int init_module(void) { int aux; for(aux=0; aux<howmany; aux++) printk(kern_info "Hello world %d!\n", aux); return 0;} Programação de Sistemas Módulos : 13/15 Exportação (1) Por omissão, variáveis de funções são locais ao módulo. Pode haver necessidade de separar módulos, por exemplo um dependendente ao hardware e outro mais abstracto (independente do hardware) parport parport_pc Kernel API baixo lp elevado Nível abstracção No Linux, parport exporta funções para os módulos lp e parport_pc Programação de Sistemas Módulos : 14/15

Exportação (2) As funções exportadas são armazenadas numa tabela de dispersão, denominada kernel symbol table, pelas directivas: EXPORT_SYMBOL(identificador) EXPORT_SYMBOL_GPL(identificador) Apenas para outros módulos com licença GPL Programação de Sistemas Módulos : 15/15