Desenvolvendo Sistemas Linux Embarcado

Tamanho: px
Começar a partir da página:

Download "Desenvolvendo Sistemas Linux Embarcado"

Transcrição

1 Desenvolvendo Sistemas Linux Embarcado Embedded Por Sergio Prado. São Paulo, Novembro de 2012 Copyright Embedded All rights reserved.

2 SOBRE ESTE DOCUMENTO Este documento é baseado no material de treinamento disponibilizado pela Free Electrons em: Este documento é disponibilizado sob a Licença Creative Commons BY-SA Os fontes deste documento estão disponíveis em:

3 SOBRE O INSTRUTOR Sergio Prado tem mais de 15 anos de experiência em desenvolvimento de software para sistemas embarcados, em diversas arquiteturas de CPU (ARM, PPC, MIPS, x86, 68K), atuando em projetos com Linux embarcado e sistemas operacionais de tempo real. É sócio da Embedded, onde atua com consultoria, treinamento e desenvolvimento de software para sistemas embarcados: Mantém um blog pessoal sobre Linux e sistemas embarcados em:

4 AGENDA DO TREINAMENTO DIA 1: Introdução e arquitetura de sistemas Linux embarcado, shell do Linux, hardware, toolchain, bootloader e kernel. DIA 2: Sistemas de arquivo, módulos do kernel, dispositivos de armazenamento e sistemas de build. DIA 3: Compilando e desenvolvendo bibliotecas e aplicações, licenças de software, aplicações gráficas em Qt, debugging e tracing.

5 AMBIENTE DE LABORATÓRIO /opt/labs/ dl/ docs/ guides/ hardware/ training/ videos/ ex/ tools/ Ambiente de laboratório Aplicações e pacotes open source Que serão usados durante as atividades de laboratório Documentação Guias de consulta (shell, vi, etc) Documentação do hardware Slides e atividades de laboratório. Vídeos Exercícios de laboratório Ferramentas de uso geral

6 ORIENTAÇÕES GERAIS Pergunte... Expresse seu ponto de vista... Troque experiências... Ajude... Participe!

7 Desenvolvendo Sistemas Linux Embarcado Introdução à Linux embarcado

8 OS 3 MARCOS 1970: Engenheiros da Bell Labs, liderados por Ken Thompson e Dennis Ritchie, criam o sistema operacional UNIX. 1983: Richard Stallman, projeto GNU e o conceito de software livre. Começa o desenvolvimento do gcc, gdb, glibc e outras ferramentas importantes. 1991: Linus Torvalds, projeto do kernel Linux, um sistema operacional UNIX-like. Em conjunto com o projeto GNU, nasce o sistema operacional GNU/Linux.

9 Em 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).

10 20 ANOS DEPOIS Embedded

11 VÍDEO (OS 20 ANOS DO LINUX) Embedded

12 O KERNEL Linux é o kernel! As distribuições Linux (Ubuntu, Fedora, Debian, Slackware, etc) integram o kernel Linux, bibliotecas e aplicações. O correto é chamar estas distribuições de sistemas operacionais GNU/Linux. Linux embarcado é o uso do kernel Linux e de diversos componentes open-source em sistemas embarcados.

13 PRINCIPAIS CARACTERÍSTICAS Portabilidade para mais de 20 arquiteturas! Escalabilidade: o mesmo kernel roda em relógios, em celulares e em servidores da bolsa de valores! Livre de royalties. Roda em dispositivos com pouquíssimos recursos.

14 PRINCIPAIS CARACTERÍSTICAS (cont.) Embedded Estabilidade: capaz de rodar por muito tempo sem precisar de um único reboot. Modularidade: capaz de rodar apenas o que é necessário para seu projeto. Multicore: suporta múltiplas CPU. Recursos infinitos disponíveis na internet.

15 REUSO DE COMPONENTES Uma das principais vantagens do uso do Linux em sistemas embarcados: reuso de componentes! A comunidade open-source já fornece implementações prontas para as principais funcionalidades dos projetos: suporte à hardware, protocolos de rede, bibliotecas gráficas, criptografia, etc. Suporte à hardware. Ex: Linux foi o primeiro kernel a suportar os padrões USB 2.0, USB 3.0, bluetooth, etc. Desenvolvimento rápido baseado em componentes prontos. Foco no seu produto, core business, time-to-market!

16 BAIXO CUSTO Sem royalties: use e abuse de software livre! Se sua aplicação usa apenas software livre, incluindo as ferramentas de desenvolvimento, seu custo de software é zero! Seu único custo será a aquisição de know-how. Permite que você possa investir mais no hardware e em treinamento para sua equipe!

17 CONTROLE TOTAL Trabalhando com software livre, você tem o código-fonte de todos os componentes do seu sistema. Liberdade para modificar, otimizar, debugar, melhorar. Não fica preso à prioridade que fornecedores ou terceiros darão ao seu projeto. Total controle do software do seu projeto!

18 QUALIDADE Muitos componentes open source são usados em milhares de sistemas ao redor do mundo. Normalmente a qualidade é bem melhor que a de softwares proprietários (muitas pessoas olhando o mesmo problema!). Permite uma sólida base para seu projeto. É claro, nem todo software open software é de boa qualidade, portanto tome cuidado. Procure sempre aqueles mais usados em outros projetos e com uma comunidade mais ativa.

19 SUPORTE DA COMUNIDADE Componentes open-source são desenvolvidos por uma comunidade de desenvolvedores e usuários. As comunidades podem te fornecer suporte de alta qualidade. Você tem contato inclusive com os principais desenvolvedores dos projetos. Geralmente melhor que o suporte em empresas comerciais, mas você precisa saber como usar corretamente o suporte da comunidade. Permite você resolver os problemas mais rapidamente!

20 MITOS Mito 1: Linux is Free. Linux não é grátis, Linux é livre! Do 2o. parágrafo da GPL: When we speak of free software, we are refering to freedom, not price. Mito 2: Não consigo proteger a propriedade intelectual do meu produto. Consegue sim, basta tomar alguns cuidados com licenças de software!

21 Desenvolvendo Sistemas Linux Embarcado Arquitetura básica

22 ARQUITETURA BÁSICA Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

23 COMPONENTES DO SISTEMA Hardware: seu produto! Bootloader: iniciado pelo hardware, responsável pela inicialização básica, carregamento e execução do kernel Linux. Kernel Linux: Núcleo do sistema operacional. Gerencia CPU, memória e I/O, exportando serviços para as aplicações do usuário. Rootfs: sistema de arquivos principal. Biblioteca C: interface entre o kernel e as aplicações do usuário. Bibliotecas e aplicações do usuário. Toolchain: conjunto de ferramentas para gerar os binários do sistema.

24 HARDWARE Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

25 HARDWARE Embedded

26 CPU Suporta mais de 25 arquiteturas diferentes (x86, ia64, ARM, PPC, MIPS, SuperH, Blackfin, Coldfire, etc). 32/64 bits: não foi feito para microcontroladores! Originalmente projetado para CPUs com MMU (Memory Management Unit). O projeto uclinux foi criado para que o Linux pudesse ser usado em CPUs sem MMU. Mas boa parte do uclinux já foi integrado à árvore oficial do kernel, possibilitando o uso do Linux em diversas CPUs sem MMU (m68k e arm sem MMU, H8/300 da Hitachi, ADI Blackfin, etc).

27 MEMÓRIA RAM Um sistema bem básico pode funcionar com até 8MB de RAM. Ideal para começar: 32MB.

28 DISPOSITIVOS DE ARMAZENAMENTO Suporta armazenamento em memória flash NAND ou NOR. Suporta dispositivos de armazenamento em bloco, incluindo discos e cartões SD/MMC. Um sistema bem básico pode funcionar com 2M de armazenamento (ou até menos!).

29 COMUNICAÇÃO O Linux suporta muitos barramentos comuns em sistemas embarcados: I2C, SPI, CAN, 1-wire, SDIO, USB, etc. E também os principais protocolos de rede: Ethernet, Wi-Fi, Bluetooth, CAN, IPv4, IPv6, TCP, UDP, etc. Se o barramento ou protocolo não possuir restrições de licença, é bem provável que esteja implementado no kernel. Já protocolos ou barramentos com restrições de licença tem dificuldade para entrar na árvore oficial do kernel (Ex: Zigbee).

30 CRITÉRIOS PARA SELEÇÃO Certifique-se de que o hardware já é suportado pelo Linux e por um bootloader open-source. Suporte nas versões oficiais dos projetos (kernel e bootloader) é bem melhor: maior qualidade e novas versões disponíveis. A diferença entre uma plataforma suportada na árvore de projeto original do kernel, e outra plataforma não suportada de forma oficial, pode te trazer grandes consequências em termos de custo e tempo de desenvolvimento!

31 TOOLCHAIN Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

32 TOOLCHAIN Conjunto de ferramentas de programação usadas para gerar determinado produto, seja um software ou mesmo um sistema completo. Quando a plataforma de desenvolvimento (host) é diferente da plataforma alvo (target), chamamos o toolchain de cross-compiling toolchain.

33 TOOLCHAIN (cont.) Código-fonte Toolchain nativo Cross-compiling toolchain Host x86 Binário x86 x86 Binário ARM ARM Target

34 COMPONENTES DO TOOLCHAIN Compilador (gcc). Assembler e Linker (binutils). Standard C Library (glibc, uclibc, dietlibc, etc).

35 TOOLCHAINS PRONTOS Code Sourcery (ARM): MIPS: Linaro (ARM): https://wiki.linaro.org/workinggroups/toolchain

36 FERRAMENTAS OPEN SOURCE Crosstool-ng: Buildroot:

37 SISTEMA LINUX EMBARCADO Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

38 SISTEMA LINUX EMBARCADO (NA FLASH) Bootloader Kernel Rootfs Memória flash

39 BOOTLOADER Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

40 BOOTLOADER Todo hardware possui um mecanismo de inicialização, que é responsável por carregar e executar o bootloader. O bootloader é responsável por carregar e executar o kernel do sistema operacional (no nosso caso, o Linux).

41 FUNCIONALIDADES DO BOOTLOADER Inicializar o hardware antes de executar o kernel, como por exemplo configurar a controladora de SDRAM. Passar parâmetros para o kernel. Prover mecanismos para carregar e gravar o kernel e o sistema de arquivos na memória flash. Inicializar via rede ou pelo cartão SD. Rotinas de diagnóstico de hardware.

42 PRINCIPAIS BOOTLOADERS x86: LILO Grub ARM, MIPS, PPC e outras arquiteturas: U-Boot Barebox Redboot

43 KERNEL Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

44 INICIALIZAÇÃO BÁSICA Inicializa CPU, memória e barramentos. Configura a memória virtual (se tiver MMU). Inicializa os device drivers. Inicia o escalonador de tarefas. Inicia threads do kernel. Monta sistema de arquivos principal (rootfs) e chama o processo init.

45 CARACTERÍSTICAS DO KERNEL Gerencia execução de processos e controla acesso à memória e I/O. Conceito de kernel space x user space. Interface de user space com kernel space via chamadas do sistema (system calls). Acesso ao hardware via arquivos de dispositivo. Gerenciamento dinâmico dos módulos do kernel.

46 EXEMPLO DE SYSTEM CALL Embedded

47 ROOTFS Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

48 COMPONENTES BÁSICOS Biblioteca do sistema (uclibc, glibc, eglibc, dietlibc, etc). Mecanismo de inicialização. Bibliotecas e aplicações.

49 APLICAÇÕES PARA EMBARCADOS Dropbear: cliente e servidor SSH (~110K). Thttpd: servidor web (~88K). DirectFB: biblioteca gráfica (~1,4MB). SQLite: Banco de dados (~250KB).

50 BUSYBOX O canivete suíço de sistemas embarcados com Linux! Combina versões mais leves de ferramentas UNIX em um único binário, otimizado por tamanho. Geralmente as ferramentas são mais limitadas em termos de funcionalidades comparadas às originais.

51 BUSYBOX TUDO ISSO EM ~1MB! Embedded

52 SISTEMA LINUX Desenvolver um sistema Linux embarcado é como brincar de Lego!

53 BUILD SYSTEM Um build system é capaz de: Gerar o toolchain. Compilar e gerar a imagem do bootloader. Configurar, compilar e gerar a imagem do kernel. Configurar, compilar bibliotecas e aplicações, e gerar a imagem final do rootfs.

54 ALGUNS BUILD SYSTEMS Proprietários: Monta Vista. Wind River. TimeSys. Open source: Buildroot. OpenEmbedded. Yocto. PTXdist. LTIB.

55 OS 3 PAPÉIS DO DESENVOLVEDOR Desenvolvedor de aplicações: desenvolve aplicações Linux. Integrador: Integra todos os componentes (bootloader, kernel, bibliotecas e aplicações) em um sistema Linux embarcado. Desenvolvedor de BSP (Board Support Package): porta o kernel e o bootloader, desenvolve os device drivers para os dispositivos de hardware usados no produto, etc. Nosso foco neste treinamento: integrador e desenvolvedor de aplicações!

56 VAMOS COMEÇAR? Embedded

57 Desenvolvendo Sistemas Linux Embarcado Ambiente de desenvolvimento

58 AMBIENTE DE DESENVOLVIMENTO Um ambiente de desenvolvimento para Linux embarcado é composto normalmente por 3 componentes principais: Toolchain (ferramentas de compilação). Buildsystem (ferramenta de geração do sistema Linux). IDE para desenvolvimento e debugging de aplicações.

59 SOLUÇÕES Existem soluções prontas, fornecidas por empresas como MontaVista, Wind River e TimeSys, com seu próprio ambiente e ferramentas de desenvolvimento. Elas usam um conjunto de componentes open-source e proprietários. Existem também soluções open source, completamente abertas e suportadas pela comunidade. No nosso treinamento, usaremos soluções abertas! Aprendendo a base, migrar depois para outras soluções é bem mais fácil!

60 SO DE DESENVOLVIMENTO É fortemente recomendado o uso do Linux como sistema operacional para desenvolvimento em Linux embarcado! Todas as ferramentas disponíveis na comunidade open source foram feitas para rodar em Linux. Você pode ter problemas em tentar rodar em outro sistema operacional, e provavelmente não terá suporte da comunidade. Usando Linux, você aprende Linux!

61 QUE DISTRIBUIÇÃO USAR? Embedded

62 HOST E TARGET Host: máquina de desenvolvimento. Target: hardware, produto, kit de desenvolvimento. Conectados normalmente por uma conexão serial (RS232, USB, Ethernet, etc). Host Serial Ethernet Target

63 NOSSA PRINCIPAL FERRAMENTA! Embedded

64 PERMISSÕES Linux é um sistema multi-usuário: root é o usuário administrador que tem permissão para executar qualquer operação privilegiada como mudar a configuração do sistema ou montar um sistema de arquivos. Outros usuários não tem todos os mesmos privilégios de administração. Durante o treinamento, para executar operações que necessitem de privilégios de administrador, usaremos o comando sudo. Exemplo: $ sudo mount /dev/sdb1 /mnt/usb

65 GUIAS DE REFERÊNCIA E ESTUDO Alguns guias de referência e estudo estão disponíveis no ambiente de laboratório em docs/guides: GuiaFocaLinux.pdf (guia foca Linux iniciante/intermediário). Guia-Ubuntu.pdf (guia do iniciante Ubuntu). vi.pdf (editor de textos vi). shell.pdf (linha de comandos do shell). canivete-shell.pdf (canivete suíço do shell). lkn.tar.gz (livro Linux Kernel in a Nutshell). ldd3.tar.bz2 (livro Linux Device Drivers 3ed).

66 LABORATÓRIO Estudando a linha de comandos

67 Desenvolvendo Sistemas Linux Embarcado i.mx53 Quick Start Board

68 i.mx53 QUICK START BOARD Embedded

69 CARACTERÍSTICAS CPU i.mx535 de 1GHz da Freescale (Cortex-A8). 1GB de memória RAM DDR3. Conector para cartão SD/MMC, microsd e interface SATA. Saídas de áudio estéreo e vídeo VGA, e entrada para microfone. Conector de expansão com saídas HDMI, display LCD, câmera e SDIO. Interfaces USB host/device, Ethernet, UART, JTAG, botões, leds, etc.

70 DIAGRAMA DE BLOCOS Embedded

71 REFERÊNCIAS E DOCUMENTAÇÃO A documentação do hardware esta disponível no ambiente de laboratório em docs/guides: CPU_DS_iMX53.pdf (i.mx53 datasheet) BOARD_DS_IMX53.pdf (board reference) BOARD_UG_IMX53.pdf (user's guide) BSP_LINUX_mx53.tar.gz (Linux BSP) Recursos na internet:

72 CONECTANDO O HARDWARE Embedded

73 LABORATÓRIO Conectando e testando o hardware

74 Desenvolvendo Sistemas Linux Embarcado Toolchain

75 O QUE SÃO TOOLCHAINS? Ao pé da letra, e traduzindo literalmente, toolchain é uma "corrente de ferramentas". Na prática, é um conjunto de ferramentas de compilação. Você se lembra do processo de compilação de um código em C? Ele envolve normalmente as seguintes etapas: pré-processamento, compilação, montagem (assembler) e linkagem. Cada uma destas etapas é executada por uma ferramenta (pré-processador, compilador, assembler e linker), e todas elas fazem parte do toolchain.

76 TIPOS DE TOOLCHAIN As ferramentas de desenvolvimento normalmente disponíveis em um desktop GNU/Linux são chamadas de toolchain nativo. Este toolchain roda na sua máquina e compila código para ser executado na sua máquina, geralmente um x86. Em desenvolvimento de sistemas embarcados normalmente é complicado (às vezes até impossível) usar um toolchain nativo, porque precisamos de bastante espaço em disco, capacidade de processamento, memória, etc. Portanto, para esta tarefa, o melhor é usar um cross-compiling toolchain, que roda na sua plataforma de desenvolvimento mas gera código para a sua plataforma alvo.

77 TIPOS DE TOOLCHAIN (cont.) Código-fonte Toolchain nativo Cross-compiling toolchain Host x86 Binário x86 x86 Binário ARM ARM Target

78 COMPONENTES DO TOOLCHAIN Compilador (GCC) Biblioteca C padrão Binutils Headers do kernel Debugger (GDB) Toolchain

79 COMPILADOR GCC Compilador GNU C, o famoso compilador de software livre. Compatível com as linguagens C, C++, Ada, Fortran e Java, dentre outras. Pode gerar código para diversas arquiteturas, incluindo ARM, AVR, Blackfin, MIPS, PowerPC, x86, etc.

80 BINUTILS Binutils é um conjunto de ferramentas para manipular arquivos binários para uma arquitetura específica. Algumas das principais ferramentas disponibilizadas pelo binutils: as: assembler, gera o binário baseado em um código Assembly. ld: linker. ar, ranlib: usadas para gerar arquivos.a (normalmente bibliotecas). objdump, readelf, size, nm, strings: inspecionar binários. strip: remove partes não usadas do binário para diminuir seu tamanho.

81 BIBLIOTECA C O que é a biblioteca C? Interface entre as aplicações e o kernel. API para desenvolvimento de aplicações. O toolchain depende da biblioteca C, já que ele irá linká-la com sua aplicação para gerar os binários para a arquitetura-alvo. Diversas bibliotecas C estão disponíveis: glibc, eglibc, uclibc, dietlibc, etc. Aplicações Biblioteca C Kernel

82 GLIBC Biblioteca C do projeto GNU. Usada em boa parte dos sistemas GNU/Linux (desktop e servidores). Projetada com foco em performance e portabilidade. Dependendo do seu sistema, pode não ser uma boa escolha, já que possui um consumo considerável de espaço em disco/flash e memória RAM. Existe uma variante chamada eglibc (embedded glibc) compatível com a glibc (binário e código-fonte) e com foco em sistemas embarcados. Atualmente a eglibc é usada inclusive em algumas distribuições Linux.

83 UCLIBC Mais leve e projetada para sistemas embarcados. Foco maior na economia de recursos do que na performance. Em uma arquitetura ARM, chega a ser 4 vezes menor que a glibc, com aproximadamente 600K! Altamente configurável. Comunidade de desenvolvimento do projeto bem ativa. Usada em grande parte do dispositivos de consumo com Linux embarcado.

84 COMPARANDO GLIBC E UCLIBC Comparação realizada em uma arquitetura ARM

85 KERNEL HEADERS Sabemos que o toolchain depende da biblioteca C do sistema. Mas a biblioteca C, por sua vez, depende do kernel! Por que? Chamadas de sistema. Definições de constantes. Estruturas de dados. Por isso, para compilar a biblioteca C, o toolchain precisa dos arquivos de cabeçalho do kernel. Disponíveis em <linux/...>, <asm/...> e alguns outros diretórios dentro do diretório include nos fontes do kernel.

86 KERNEL HEADERS (EXEMPLOS) Números das chamadas de sistema em <asm/unistd.h>: #define NR_exit 1 #define NR_fork 2 #define NR_read 3 Definições de constantes em <asm generic/fcntl.h>: #define O_RDWR Estruturas de dados em <asm/stat.h>: struct stat { unsigned long st_dev; unsigned long st_ino; [...] };

87 USANDO TOOLCHAINS Existem basicamente duas soluções para instalar e usar um toolchain: 1. Usar um toolchain pronto, fornecido por uma empresa ou pela comunidade. 2. Configurar e gerar seu próprio toolchain de acordo com suas necessidades.

88 USANDO UM TOOLCHAIN PRONTO Solução adotada em muitos projetos: Vantagem: simples e conveniente. Desvantagem: inflexível, você não consegue otimizar o toolchain de acordo com suas necessidades. Possíveis escolhas: Toolchain fornecido pelo fabricante do chip (ex: Freescale). Toolchain fornecido por empresas especializadas (ex: Mentor Graphics). Toolchain fornecido pela comunidade (ex: Linaro). Uma referência bem completa de toolchains em:

89 INSTALANDO E USANDO Basta seguir o procedimento do fornecedor da solução. Normalmente, estes são os passos: Baixar e descompactar a toolchain em um diretório na sua máquina. Adicionar no PATH o diretório onde se encontram os binários: export PATH=/path/to/toolchain/bin/:$PATH Compilar sua aplicação usando o toolchain: PREFIX gcc teste.c o teste O PREFIX depende da configuração do toolchain, e permite diferenciar toolchains nativos de toolchains para cross-compilação.

90 LABORATÓRIO Instalando e testando um toolchain pronto

91 GERANDO SEU PRÓPRIO TOOLCHAIN Gerar um toolchain manualmente é uma tarefa difícil e dolorosa! Pode levar muitos dias! É necessário aprender muitos detalhes, muito componentes para configurar e compilar. Muitas decisões para serem feitas manualmente: versão da biblioteca C, headers do kernel, binutils, etc. Precisa dos headers do kernel e dos fontes de todos os componentes. Precisa estar familiarizado com o gcc. Algumas plataformas necessitam que sejam aplicados patches em alguns componentes antes de compilar.

92 USANDO FERRAMENTAS Existem ferramentas que automatizam o processo de geração de toolchains. Você não precisa se preocupar com o processo de geração do toolchain, dependências, patches, etc. E por outro lado, estas ferramentas oferecem a flexibilidade de configuração e seleção dos componentes do toolchain e de suas versões.

93 ALGUMAS FERRAMENTAS Crosstool (suporta apenas glibc): Crosstool-ng (suporta glibc, uclibc, eglibc): Buildroot (sistema de build completo, apenas uclibc): PTXDist (suporta uclibc ou glibc): OpenEmbedded (sistema de build completo):

94 LABORATÓRIO Compilando seu próprio toolchain com o crosstool-ng

95 Desenvolvendo Sistemas Linux Embarcado Bootloader

96 BOOTLOADERS O bootloader é o código responsável por: Inicialização básica do hardware. Carregar outro binário (normalmente um sistema operacional) da memória flash, da rede ou de outro dispositivo de armazenamento não volátil para a RAM. Passar o controle da CPU para este binário. Além destas funcionalidades básicas, a maioria dos bootloaders possui uma linha de comandos para a execução de diferentes operações, como verificação de memória, formatação da flash e rotinas de diagnóstico.

97 BOOTLOADERS NO X86 BIOS em ROM Plataformas x86 normalmente vem acompanhadas de uma memória não-volátil, a BIOS. Um programa na BIOS é executado no boot do equipamento, que faz a inicialização básica do hardware, carrega para a memória e executa os primeiros 512 bytes do dispositivo de boot. Estes 512 bytes também são chamados de MBR. Estágio bytes do disco A MBR é o bootloader de 1o. estágio, que é o responsável por carregar um bootloader de 2o. estágio do disco para a RAM. Estágio 2 do disco O bootloader de 2o. estágio é mais completo, entende sistemas de arquivo, consegue ler o sistema operacional do disco e carregar para a memória. SO do disco

98 BOOTLOADERS NO X86 (cont.) LILO, já foi bastante utilizado, mas caiu em desuso. GRUB, Grand Unified Bootloader, é o mais poderoso e o padrão atualmente em desktops e servidores. Syslinux, mais utilizado em boot pela rede e por mídias removíveis (floppy disk, pendrive, CD/DVD, etc).

99 BOOT EM CPUs EMBARCADAS Quando alimentada, a CPU começa a execução em um endereço fixo. Memória física Não existe nenhum mecanismo de boot provido pela CPU ou pela plataforma. Execução começa aqui NOR flash O projeto de hardware deve garantir que a memória flash esteja com seu barramento de endereços ligados corretamente, de forma que o endereço de início de execução das instruções esteja acessível pela CPU. RAM Solução comum em microcontroladores.

100 BOOT EM CPUs EMBARCADAS (cont.) Neste caso, como o código é executado direto da flash (XIP), o uso de memórias flash NOR é obrigatório. Memória física Mas como o Linux precisa de pelo menos alguns MBs de memória, o uso de flash NOR é inviável por ser muito mais cara. Por este motivo, o Linux usa normalmente memórias flash NAND. Execução começa aqui NOR flash Mas como não conseguimos executar código diretamente de memórias flash NAND, precisamos de RAM. E quem irá configurar a controladora da SDRAM e carregar o código da flash para a RAM no boot do equipamento? O bootloader! RAM

101 BOOT EM LINUX EMBARCADO Em Linux embarcado, e principalmente em plataformas ARM, é muito comum termos um processo de boot dividido em 3 estágios: 1. A CPU tem um código de boot integrado em uma ROM interna, responsável por carregar o bootloader de 1o. estágio de uma unidade de armazenamento não volátil para a memória RAM interna (SRAM ou IRAM). 2. O bootloader de 1o. estágio deve inicializar o hardware (CPU, DRAM, GPIOs, etc) e carregar um bootloader de 2o. estágio para a RAM. 3. O bootloader de 2o. estágio carrega o sistema operacional (kernel Linux) para a RAM e executa.

102 LPC3250 (NXP) ROM Code Kickstart/S1L U-Boot Tenta o boot pela porta serial (modo de serviço), SPI, barramento externo e flash NAND, carregando o código para a SRAM (56KB). Kickstart roda da SRAM, inicializa hardware e carrega o stage 1 loader, um bootloader completo que possui diversas funções para configurar o hardware. O S1L carrega o bootloader de 2o. estágio para a RAM. Roda da RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Linux Kernel Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader não existe mais).

103 i.mx28 (FREESCALE) ROM Code Bootlets U-Boot Código de boot em ROM iniciado quando o i.mx28 é resetado. Lê as chaves de seleção do modo de boot para identificar a fonte do boot (USB, SD/MMC, NAND, I2C, SPI, JTAG). O ROM code trabalha com o conceito de boot stream, um conjunto de bootlets, que são pequenos executáveis para extender o bootloader, como o power_prep (configura PM) e o boot_prep (configura a memória SDRAM e carrega o U-Boot). Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Linux Kernel Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader não existe mais).

104 i.mx53 (FREESCALE) ROM Code U-Boot (1) Código de boot em ROM iniciado quando o i.mx53 é resetado. Lê o registrador BOOT_MODE ou um conjunto de GPIOs para determinar o dispositivo de boot (NOR/NAND, cartão SD/MMC, SATA, etc). Carrega um pedaço do U-Boot para a RAM interna (72K). Este código do U-Boot irá inicializar o hardware (clock, SDRAM, etc) e carregar o U-Boot completo para a RAM. U-Boot (2) Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Linux Kernel Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader não existe mais).

105 OMAP3530/AM35x (TI) ROM Code Procura por imagens de boot na NAND, UART, USB e MMC, e carrega para a SRAM (64KB). Um botão pode mudar a ordem da busca. X-Loader Roda da SRAM. Inicializa a controladora da SDRAM, NAND ou MMC, e carrega o bootloader de 2o. estágio para a RAM. U-Boot Roda da RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Linux Kernel Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader não existe mais).

106 AT91 (ATMEL) ROM Code Procura por imagens de boot em diversos dispositivos de armazenamento, e carrega para a SRAM (4KB). AT91Bootstrap Roda da SRAM. Inicializa a controladora da DRAM e carrega o bootloader de 2o. estágio para a RAM. U-Boot Roda da RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Linux Kernel Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader não existe mais).

107 BOOTLOADERS EM LINUX EMBARCADO Embedded O bootloader de 1o. estágio é normalmente fornecido pelo fabricante do chip, e cada plataforma tem o seu. Nosso foco é no bootloader de 2o. estágio. Existem alguns bootloaders open source. Dentre eles, os dois mais conhecidos e utilizados são: U-Boot: bastante popular em ARM, mas também usado em outras arquiteturas como MIPS e PPC. Barebox: sucessor do U-Boot, melhor projeto, melhor código, desenvolvimento ativo, mas ainda com pouco suporte à hardware.

108 U-BOOT Bootloader open-source (GPLv2) mais utilizado atualmente. Suporta uma grande variedade de CPUs, incluindo PPC, ARM, MIPS, Coldfire, x86, etc. Desde 2008, segue um intervalo fixo de release, onde a cada dois ou três meses uma versão é liberada (as versões são nomeadas com o formato YYYY.MM). Documentação disponível em:

109 FUNCIONALIDADES DO U-BOOT Exibir informações do hardware (memória, periféricos, etc). Manipular a RAM (ler, escrever, comparar, testar, etc). Manipular memórias flash (ler, escrever, apagar, etc). Boot via memória flash. Boot via rede (bootp, tftp, dhcp, serial).

110 FUNCIONALIDADES DO U-BOOT (cont.) Embedded Boot por interfaces SD/MMC ou USB. Entende partições FAT. Configuração por variáveis de ambiente e suporte à scripts. Executa código bare-metal. Carrega e executa imagens do kernel Linux. Etc!

111 BAIXANDO O U-BOOT É de responsabilidade do fabricante disponibilizar os fontes do U-Boot (porte) para a sua plataforma. O fabricante pode fazer isso e enviar o código para a árvore principal do projeto (mainline). Neste caso, os fontes podem ser baixados no site do projeto em: Mas nem sempre o fabricante faz isso! Neste caso, o fabricante irá disponibilizar os fontes em um outro local, provavelmente no seu site junto com o BSP (Board Support Package) da plataforma. Portanto, consulte a documentação da sua plataforma para saber como e onde baixar os fontes do U-Boot.

112 CONFIGURANDO O U-BOOT O U-Boot suporta diversas arquiteturas e plataformas. Antes de compilar o U-Boot, você precisa configurá-lo para a sua plataforma com o comando abaixo: make <board>_config Substitua <board> pelo nome da sua plataforma no U-Boot. Por exemplo, para configurar o U-Boot para o kit de desenvolvimento i.mx53 Quick Start Board: make mx53_loco_config

113 COMPILANDO O U-BOOT Para compilar o U-Boot, basta executar o comando make passando o prefixo do cross-compiler. Exemplo: make CROSS_COMPILE=arm linux Não se esqueça de incluir na variável de ambiente PATH o caminho do diretório do toolchain. No final, será gerada a imagem do u-boot para ser gravada no target. Se você quiser fazer uma compilação limpa, ou configurar o U-Boot para outra placa, execute antes o comando abaixo para fazer a limpeza: make mrproper

114 GRAVANDO O U-BOOT O processo de gravação do U-Boot pode ser feito de diferentes formas, dependendo do target: O bootloader de 1o. estágio pode fornecer um mecanismo de escrita na flash. O sistema pode ser configurado para iniciar por uma mídia removível (Ex: cartão SD). A CPU pode fornecer um monitor de boot que se comunica via serial ou USB. JTAG. Etc!

115 LABORATÓRIO Compilando e gravando o U-Boot

116 Desenvolvendo Sistemas Linux Embarcado Kernel Linux

117 VISÃO GERAL Aplicação Aplicação Biblioteca Biblioteca Aplicação Biblioteca C User space Chamadas de sistema Notificação de eventos Exportação de informações Kernel Gerenciamento do hardware Notificação de eventos Hardware

118 HISTÓRICO O kernel é um dos componentes do sistema operacional, que requer bibliotecas e aplicações para prover funcionalidades aos usuários. Criado em 1991 pelo estudante finlandês Linus Torvalds, começou a ser usado rapidamente como sistema operacional em projetos de software livre. Linus Torvalds foi capaz de criar uma comunidade grande e dinâmica de desenvolvedores e usuários ao redor do projeto. Atualmente, centenas de pessoas e empresas contribuem com o projeto.

119 COLABORAÇÃO Embedded

120 ARQUITETURA Embedded

121 GERENCIAMENTO DE PROCESSOS Um processo é um programa em execução, que possui um identificador (PID) e esta associado à um conjunto de recursos como arquivos abertos, mapeamento de memória, etc. Um processo contém uma ou mais linhas de execução, chamadas de threads. Cada thread possui um contador de programa, uma região do stack e uma cópia dos registradores da CPU. Internamente, o Linux não diferencia processos e threads. Uma thread nada mais é do que um processo que compartilha recursos com outras threads! Por este motivo, o Linux escalona threads, e não processos.

122 GERENCIAMENTO DE PROCESSOS (cont.) Trade-off entre capacidade de processamento e tempo de resposta (latência). O Linux é um sistema multitasking preemptivo. Ele possui o conceito de classes de escalonador, onde cada classe possui um algoritmo de escalonamento, que decide qual processo deve ser executado, quando e por quanto tempo. O escalonador padrão do Linux é o CFS (Completely Fair Scheduler), onde cada processo recebe uma "porcentagem justa" da CPU (foco em performance).

123 GERENCIAMENTO DE PROCESSOS (cont.) Possui também um escalonador para processos de tempo real, que tem prioridade sobre o CFS. Mas mesmo assim, o Linux não pode ser considerado um sistema operacional determinístico (em alguns trechos do código a latência para atender um pedido de interrupção pode ser muito grande). Existem um conjunto de patches (PREEMPT_RT) que podem ser aplicados no kernel e melhorar este cenário de alta latência. Uma opção para o uso do Linux em aplicações hard real-time é a utilização de um kernel de tempo real em conjunto com o Linux (RTLinux, RTAI, Xenomai).

124 GERENCIAMENTO DE MEMÓRIA O Linux trabalha com o mecanismo de memória virtual para gerenciar a memória do sistema. Em um sistema com memória virtual, todo o acesso à memória do sistema é realizado através de endereços virtuais, que são convertidos (por hardware) para endereços físicos durante o acesso à memória do sistema. A MMU (Memory Management Unit) é o hardware que implementa o mecanismo de memória virtual, gerenciando a memória do sistema e fazendo a conversão entre endereços de memória físicos e virtuais.

125 GERENCIAMENTO DE MEMÓRIA (cont.) Embedded Um sistema com MMU é capaz de prover: Maior endereçamento de memória para os processos: em uma arquitetura de 32 bits, os processos tem acesso à um endereçamento linear de 4G de memória virtual. Proteção: cada processo só enxerga seu espaço de endereçamento, onde um acesso inválido gera uma exceção (segmentation fault). Memory mapping: possibilidade de mapear um arquivo físico em memória. Compartilhamento: os processos podem compartilhar memória (código, dados, etc), usado por exemplo em mecanismos de IPC. SWAP: se faltar memória física, possibilita salvar e recuperar páginas de memória do disco.

126 SISTEMA DE ARQUIVO VIRTUAL O Linux é fortemente baseado em arquivos (quase tudo no sistema é representado por um arquivo). O kernel implementa a camada VFS (Virtual Filesystem) que abstrai o acesso aos arquivos, possibilitando que rotinas de acesso ao arquivo (open, read, write, close, etc) sejam mapeadas para diferentes destinos.

127 SISTEMA DE ARQUIVO VIRTUAL (cont.) Embedded Exemplo 1: Mapeando um arquivo físico em um dispositivo de armzenamento (copiando um arquivo do HD para um pendrive): cp /usr/sbin/app /mnt/pendrive/ Exemplo 2: Mapeando um arquivo virtual (listando a estatística de uso de memória do sistema): cat /proc/meminfo Exemplo 3: Mapeando o acesso ao hardware (escrevendo na porta serial): echo "Teste" > /dev/ttys0

128 KERNEL SPACE x USER SPACE Existe uma separação bem definida entre o kernel (kernel space) e as bibliotecas e aplicações do usuário (user space). O kernel roda em modo privilegiado, com total acesso à todas as instruções da CPU, endereçamento de memória e I/O, enquanto que os processos do usuário rodam em modo restrito, com acesso limitado aos recursos da máquina. Por isso, existe uma interface de comunicação, baseada chamadas de sistema (system calls), para que as bibliotecas e aplicações tenham acesso aos recursos da máquina.

129 CHAMADAS DE SISTEMA O Linux possui aproximadamente 300 chamadas de sistema. Operações em arquivos, operações de rede, comunicação entre processos, gerenciamento de processos, mapeamento de memória, timers, threads, mecanismos de sincronização, etc. As chamadas de sistema são abstraídas pela biblioteca C padrão. As aplicações normalmente não precisam fazer uma chamada direta. Tudo é feito através da biblioteca C padrão. A interface de chamadas de sistema é bem estável. Durante novas versões do kernel, apenas novas chamadas de sistema são adicionadas.

130 VERSIONAMENTO Antes da versão 2.6: Uma árvore de versões estáveis (1.0, 2.0, 2.2, 2.4). Uma árvore de versões de desenvolvimento (2.1, 2.3, 2.5). A partir de 2003, apenas uma árvore: 2.6.X. Em 2011, a versão mudou para 3.0.

131 CICLO DE RELEASE Processo de desenvolvimento a cada aproximadamente 3 meses. Merge window: 2 semanas (até sair 3.X-rc1). Bug fixing: 6 a 10 semanas (3.X-rc2, 3.X-rc3, etc). Em aproximadamente 3 meses temos a liberação do release final 3.X. Para acompanhar as mudanças no kernel:

132 FONTES DO KERNEL A versão oficial do código-fonte do kernel liberada por Linus Torvalds encontra-se em: Baixando os fontes por http: wget 3.6.tar.bz2 tar xjfv linux 3.6.tar.bz2 Baixando os fontes pelo git: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

133 FONTES DO KERNEL (cont.) Muitas comunidades e fabricantes de hardware podem manter versões alternativas do kernel: Fabricantes de hardware podem manter versões específicas do kernel com suporte às suas plataformas de referência (BSP). Comunidades podem manter versões do kernel voltadas à arquiteturas específicas (ARM, MIPS, PPC), sub-sistemas (USB, PCI, network), sistemas de tempo-real, etc. Normalmente nestas versões alternativas são disponibilizados os patches para serem aplicados em uma determinada versão do kernel. Portanto, consulte a documentação da sua plataforma para saber como e onde baixar os fontes do Linux.

134 TAMANHO DOS FONTES DO KERNEL Fontes do kernel 3.4.9: Tamanho total: 518MB ~ Arquivos ~ linhas de código Porque os fontes são tão grandes? Milhares de drivers de dispositivo, diversos protocolos de rede, suporte a diferentes arquiteturas e plataformas. O core do kernel é bem pequeno!

135 TAMANHO DOS FONTES DO KERNEL (cont.) Linux

136 LICENÇA Todo o código-fonte do Linux é software livre e liberado sob a licença GPLv2. Isso significa que: Quando você receber ou comprar um equipamento com Linux embarcado, você tem o direito de requisitar os fontes, alterá-los e redistribuí-los! Quando você produzir um equipamento com Linux embarcado, você precisa liberar os fontes do kernel sob as mesmas condições, sem restrições.

137 LICENÇA (cont.) Portanto, é ilegal distribuir um binário do kernel com módulos compilados estaticamente. Os módulos do kernels são uma área cinza: é um trabalho derivado do kernel ou não? A opinião geral da comunidade é de que drivers fechados são ruins. Sob um ponto de vista legal, cada driver é provavelmente um caso diferente. Ex: Nvidia. É realmente útil manter um driver proprietário?

138 VANTAGENS DE DRIVERS GPL Você não precisa escrever um driver do zero, podendo reusar o código de outros drivers. Você pode integrar o seu driver na árvore oficial do kernel, e não se preocupar com qualquer alteração em APIs internas do Linux. Custo zero de manutenção e melhorias no driver! Com drivers abertos você tem suporte da comunidade, com mais pessoas revisando e colaborando com seu driver. Os usuários e a comunidade tem uma visão positiva da empresa.

139 LABORATÓRIO Baixando e estudando os fontes do kernel

140 CONFIGURANDO O KERNEL O kernel possui centenas de drivers de dispositivo, diversos protocolos de rede e muitos outros itens de configuração. O kernel é bem modular, milhares de opções estão disponíveis para serem habilitadas ou desabilitadas. O processo de configuração serve para você configurar o kernel para ser compilado para sua CPU/plataforma. O conjunto de opções que você irá habilitar depende: Do seu hardware (device drivers, etc). Das funcionalidades (protocolos de rede, sistemas de arquivo, etc).

141 CONFIGURAÇÃO As configurações são salvas em um arquivo chamado.config no diretório principal dos fontes do kernel, e possuem o formato key=value. Exemplo: CONFIG_ARM=y Dificilmente você vai precisar editar o arquivo.config manualmente. Existem ferramentas de interface gráfica para configurar o kernel e gerar o arquivo de configuração automaticamente: make menuconfig make gconfig make xconfig make nconfig

142 make xconfig Embedded

143 make gconfig Embedded

144 make nconfig Embedded

145 make menuconfig Embedded

146 CONFIGURANDO O KERNEL (cont.) O kernel é um binário único, resultado do processo de linkagem de todos os arquivos-objeto das funcionalidades que você habilitou, incluindo os device drivers. O kernel permite que algumas funcionalidades possam ser habilitadas e compiladas de duas formas: Estática ou built-in: a funcionalidade selecionada é linkada estaticamente à imagem final do kernel. Dinâmica ou módulo: é gerado um módulo daquela funcionalidade (arquivo com extensão.ko). Este módulo não é incluido na imagem final do kernel. Ele é incluido no sistema de arquivos e pode ser carregado dinamicamente (em tempo de execução), conforme a necessidade.

147 OPÇÕES DE CONFIGURAÇÃO Opções booleanas (verdadeiro/falso): [ ] Opção desabilitada [*] Opção habilitada Opções de 3 estados: < > Opção desabilitada <*> Opção habilitada (built in) <M> Opção habilitada (módulo) Números inteiros. Ex: (17) Kernel log buffer size Strings. Ex: (iso8859 1) Default iocharset for FAT

148 DEPENDÊNCIAS Na configuração do kernel, podem existir dependências entre funcionalidades: Exemplo 1: o driver de um dispositivo I2C depende da habilitação do barramento I2C para ser habilitado. Exemplo 2: o driver do barramento USB é habilitado automaticamente quando o driver de um dispositivo USB é habilitado.

149 CONFIGURAÇÃO POR ARQUITETURA Toda a configuração do kernel é dependente da arquitetura. Por padrão, o kernel considera uma compilação nativa, então irá usar a arquitetura da máquina de desenvolvimento (normalmente x86) no comando abaixo: make menuconfig Portanto, para configurar para ARM por exemplo, você precisa especificar a arquitetura: make ARCH=arm menuconfig Ao invés de passar a variável ARCH na chamada do make, você pode também definí-la como variável de ambiente ou alterar o arquivo Makefile do diretório principal do kernel.

150 CONFIGURAÇÕES PRÉ-DEFINIDAS Arquivos de configuração pré-definidos para diversas plataformas estão disponíveis em arch/<arch>/configs/. O uso de arquivos pré-configurados é a forma padrão de configurar um kernel para uma plataforma específica. Por exemplo, para carregar a configuração padrão do kit de desenvolvimento i.mx53 Quick Start Board: make imx5_defconfig Se você mexeu na configuração padrão e deseja salvá-la, pode criar uma cópia conforme exemplo abaixo: cp.config arch/<arch>/configs/myconfig_defconfig

151 VALIDANDO O ARQUIVO DE CONFIGURAÇÃO O comando abaixo faz a validação e a consistência do arquivo de configuração do kernel: make oldconfig Ele avisa e configura automaticamente parâmetros e dependências que antes não existiam. Deve ser usado sempre que: Você alterar o arquivo.config manualmente. Você reutilizar o mesmo.config em diferentes versões do kernel.

152 LABORATÓRIO Configurando o kernel

153 COMPILANDO O KERNEL Depois de configurado, para compilar nativamente basta executar: make Não precisa de previlégios de root! Para cross-compilar, você precisa indicar a arquitetura e o prefixo do cross-compiler. Exemplo: make ARCH=arm CROSS_COMPILE=arm linux O comando acima irá gerar uma imagem genérica para ARM. Se você quiser gerar uma imagem específica para determinado bootloader, deve adicionar ao fim do comando o nome da imagem. Exemplo para o U-Boot: make ARCH=arm CROSS_COMPILE=arm linux uimage

154 COMPILANDO O KERNEL (cont.) Ao fim do processo de compilação, serão geradas as seguintes imagens: vmlinux: gerada no diretório raiz dos fontes, é a imagem do kernel no formato ELF, que não é bootavel, mas pode ser usada para debugging. Módulos do kernel: arquivos com extensáo.ko dentro dos respectivos diretórios dos drivers. Em arch/<arch>/boot/: Image: imagem final do kernel, bootável e descomprimida. *Image: imagem bootável e comprimida do kernel (bzimage para x86, zimage para ARM, etc). uimage: imagem do kernel para o U-Boot (opcional).

155 INSTALANDO O KERNEL Para instalar o kernel, basta executar o comando abaixo: make install Este comando irá instalar os seguintes arquivos no diretório /boot: vmlinuz-<version> (imagem do kernel comprimida) System.map-<version> (endereços dos símbolos do kernel) config-<version> (arquivo de configuração do kernel) Normalmente não é usado em sistemas embarcados! Em sistemas embarcados, normalmente gravamos o kernel em um dispositivo de armazenamento (cartão SD, memória flash, etc).

156 FAZENDO A LIMPEZA Remove todos os arquivos gerados (imagens, arquivos-objeto, etc). make clean Remove todos os arquivos de gerados e arquivos de configuração (usado quando pretende-se mudar de plataforma). make mrproper Além dos arquivos gerados e arquivos de configuração, remove também arquivos de backup (bom para gerar patches). make distclean

157 LINHA DE COMANDOS DO KERNEL Ao ser carregado, o kernel pode receber um conjunto de parâmetros. Chamamos esses parâmetros de linha de comandos do kernel. Esta linha de comandos pode ser passada ao kernel de duas formas: Pelo bootloader. Hardcoded na configuração do kernel, através da opção CONFIG_CMDLINE. Esta linha de comandos é uma string com diversas opções no formato key=value.

158 LINHA DE COMANDOS DO KERNEL (cont.) console=ttysac0 root=/dev/mtdblock3 rootfstype=jffs2 Onde: console = dispositivo que será usado como console root = dispositivo onde se encontra o sistema de arquivos rootfstype = tipo do sistema de arquivos (JFFS2) Existem dezenas de outras opções! Documentação disponível em: Documentation/kernel-parameters.txt

159 LABORATÓRIO Compilando e testando o kernel

160 Desenvolvendo Sistemas Linux Embarcado Rootfs

161 SISTEMAS DE ARQUIVO Sistemas de arquivo são usados para organizar dados, de forma hierárquica, em diretórios e arquivos disponíveis em dispositivos de armazenamento (locais ou remotos). Em sistemas Unix, aplicações e usuários enxergam apenas uma hierarquia única e global de arquivos e diretórios, que podem ser compostos por diferentes sistemas de arquivo. Um ou mais sistemas de arquivo são montados em locais específicos nesta hierarquia de diretórios.

162 SISTEMAS DE ARQUIVO (cont.) Quando um sistema de arquivo é montado em um diretório, este diretório é chamado de ponto de montagem ou mount point, e o conteúdo deste diretório irá refletir o conteúdo armazenado no dispositivo de armazenamento. Isso permite que aplicações acessem diretórios e arquivos facilmente independentemente da localização ou do tipo do dispositivo de armazemanento. Tudo o que as aplicações enxergam são arquivos e diretórios!

163 O COMANDO MOUNT O comando mount permite montar um sistema de arquivo: mount t type device mountpoint Onde: -t type é opcional e identifica o tipo do sistema de arquivo (fat, ext3, jffs2, etc). device é o dispositivo de armazenamento, ou local na rede, onde estão armazenados os dados. mountpoint é o diretório onde os arquivos serão acessados, também chamado de ponto de montagem.

164 O COMANDO UMOUNT O comando umount permite desmontar um sistema de arquivo: umount <dispositivo ou ponto de montagem> Quando trabalhamos com dispositivos removíveis, é necessário executar o umount antes de remover o dispositivo, já que o Linux por padrão mantém em cache as alterações realizadas no dispositivo para melhorar a performance, e o umount garante que estas alterações sejam realizadas antes da remoção do dispositivo.

165 MONTANDO UM SISTEMA DE ARQUIVO Embedded Criando o diretório (ponto de montagem): mkdir /mnt/usbkey Montando um pendrive: mount t vfat /dev/sda1 /mnt/usbkey Verificando o conteúdo: ls /mnt/usbkey docs prog.c picture.png movie.avi Desmontando o dispositivo USB: umount /mnt/usbkey

166 SISTEMA DE ARQUIVO ROOT Um sistema de arquivo específico é montado na raiz principal da hierarquia, identificado pelo /. Este sistema de arquivo é chamado de root ou rootfs. Como ele é o primeiro sistema de arquivo a ser montado, não tem como fazê-lo com o comando mount, já que o mesmo ainda não esta disponível. Lembre-se: ainda não existe nenhum sistema de arquivo montado! Por isso, o responsável por esta tarefa é o kernel, de acordo com a opção root na linha de comandos do kernel.

167 SISTEMA DE ARQUIVO ROOT (cont.) Se você não passar a opção root na linha de comando, o kernel entra em pânico! Please append a correct "root=" boot option Kernel panic not syncing: VFS: Unable to mount root fs on unknown block(0,0) Passando a opção root para o kernel:... console=ttys2,115200n8 root=/dev/sda2...

168 LOCALIDADES DO ROOTFS O rootfs pode ser montado de diferentes localidades: Da partição de um HD. Da partição de um pendrive. Da partição de um cartão SD. Da partição de uma memória flash NAND. Pela rede, através do protocolo NFS. Da memória, pré-carregado pelo bootloader. É nossa a decisão de como iniciar o sistema, e assim configurar corretamente a opção root do kernel.

169 MONTANDO O ROOTFS Partição de um HD ou pendrive USB: root=/dev/sdxy, onde X é uma letra que indica o dispositivo e Y é o número da partição. Exemplo: root=/dev/sdb2 Partição de um cartão SD root=/dev/mmcblkxpy, onde X é um número de identificação do dispositivo, e Y é o número da partição. Exemplo: root=/dev/mmcblk0p2

170 MONTANDO O ROOTFS (cont.) Partição de uma memória flash NAND: root=/dev/mtdblockx, onde X é o número da partição. Exemplo: root=/dev/mtdblock3

171 MONTANDO O ROOTFS VIA REDE Uma vez que sua rede esteja funcionando, o rootfs pode estar na sua máquina de desenvolvimento, e ser exportado via protocolo NFS (Network File System). Host Servidor NFS Target Cliente NFS Muito mais fácil e rápido de atualizar o rootfs sem precisar gravar na flash e reiniciar o equipamento. Possibilidade de ter um rootfs bem grande, podendo incluir ferramentas e binários que não caberiam na flash do equipamento.

172 MONTANDO O ROOTFS EM MEMÓRIA Também é possível ter uma imagem de rootfs integrada à imagem do kernel, sendo por consequência carregada em memória junto com o kernel. Este mecanismo é chamado de initramfs. Kernel Initramfs (cpio archive) Imagem do kernel (uimage, zimage, bzimage, etc)

173 INITRAMFS Vantagens: Pode ser usado como um passo intermediário para montar o verdadeiro rootfs (mecanismo comum em desktops e servidores). Em Linux embarcado, pode ser a solução para sistemas com pouquíssimos recursos. O boot é mais rápido, e como o sistema de arquivo já esta em memória, as aplicações também iniciam mais rapidamente. Desvantagens: Como o initramfs é montado em RAM, o armazenamento é volátil (perde as informações ao reiniciar).

174 ORGANIZAÇÃO DO ROOTFS A organização do rootfs no Linux é padronizada pelo Filesystem Hierarcy Standard. A maioria dos sistemas Linux estão de acordo com este padrão porque: As aplicações esperam este formato. Facilita o trabalho de usuários e desenvolvedores quando precisam trabalhar com diferentes sistemas Linux.

175 DIRETÓRIOS MAIS IMPORTANTES /bin /boot /dev /etc /home /lib /media /mnt /proc Programas básicos Imagem do kernel (apenas quando o bootloader suporta carregar o kernel do sistema de arquivos, normalmente usado em arquiteturas x86) Arquivos de dispositivo Arquivos de configuração Diretório de arquivos dos usuários Bibliotecas básicas do sistema Ponto de montagem para mídias removíveis Ponto de montagem para mídias estáticas Ponto de montagem do sistema de arquivo virtual proc

176 DIRETÓRIOS MAIS IMPORTANTES (cont.) /root /sbin /sys /tmp /usr /usr/bin /usr/lib /usr/sbin /var Home do usuário root Aplicações de administração do sistema Ponto de montagem do sistema de arquivo virtual sysfs Arquivos temporários Aplicações e dados dos usuários Aplicações básicas do usuário Bibliotecas do usuário Aplicações de administração do usuário Arquivos de dados (logs, banco de dados, arquivos temporários, etc)

177 ARQUIVOS DE DISPOSITIVO Um conceito muito importante trazido do mundo Unix: boa parte dos objetos do sistema são representados como arquivos, permitindo que as aplicações manipulem estes objetos usando uma API comum (open, read, write, etc). Da mesma forma, os dispositivos de hardware também são representados no Linux através de arquivos, chamados de arquivos de dispositivo, e disponíveis no diretório /dev.

178 INFORMAÇÕES DOS DISPOSITIVOS Internamente, cada arquivo de dispositivo esta associado à três informações básicas: Major number: indica a categoria do dispositivo. Minor number: indica o número do dispositivo. Tipo do dispositivo: Dispositivos de bloco: composto por blocos de dados de tamanho fixo, endereçáveis e de acesso aleatório, que podem ser lidos e/ou escritos. Exemplos: HD, pendrive, etc. Dispositivo de caractere: possibilita o acesso sequencial de bytes, sem começo, sem fim e sem tamanho! Exemplos: portal serial, interface de rede, placa de som, etc.

179 EXEMPLOS Exemplos de arquivos de dispositivo: ls la /dev/ttys* /dev/sda1 brw rw 1 root disk 8, :54 /dev/sda1 crw rw 1 root dialout 4, :54 /dev/ttys0 crw rw 1 root dialout 4, :54 /dev/ttys1 crw rw 1 root dialout 4, :54 /dev/ttys2 crw rw 1 root dialout 4, :54 /dev/ttys3 Escrevendo Hello na porta serial: int fd; fd = open( /dev/ttys0, O_RDWR); write(fd, Hello, 5); close(fd);

180 CRIANDO ARQUIVOS DE DISPOSITIVO Para sistemas mais simples, os arquivos de dispositivo podem ser criados manualmente com o comando mknod (é necessário ter privilégio de root): mknod /dev/<device> [c b] major minor Para sistemas mais complexos, existem mecanismos para adicionar e remover arquivos de dispositivo dinamicamente: devtmpfs udev mdev

181 SISTEMA DE ARQUIVO VIRTUAL PROC Embedded O sistema de arquivo virtual proc exporta (normalmente para o diretório /proc) um conjunto de informações do kernel, incluindo estatísticas dos processos, memória e uso de I/O. O proc também possibilita ajustar parâmetros do kernel em tempo de execução. Muitas aplicações, como os comandos ps e top, usam as informações disponíveis no /proc para exibirem informações dos processos rodando no sistema.

182 SISTEMA DE ARQUIVO VIRTUAL PROC (cont.) Montando o proc: mount t proc none /proc Mais informações na documentação do kernel: Documentation/filesystems/proc.txt

183 SISTEMA DE ARQUIVO VIRTUAL SYSFS Embedded O sistema de arquivo virtual sysfs exporta (normalmente para o diretório /sys) informações de drivers e dispositivos de hardware conectados ao sistema. Usado por aplicações que querem ler informações dos dispositivos de hardware conectados ao sistema. Ex: mdev, udev, etc. Pode ser usado também para parametrizar ou configurar determinado hardware.

184 SISTEMA DE ARQUIVO VIRTUAL SYSFS (cont.) Montando o sysfs: mount t sysfs none /sys Mais informações na documentação do kernel: Documentation/filesystems/sysfs.txt

185 A INICIALIZAÇÃO Após montar o rootfs, o kernel irá tentar executar uma aplicação de inicialização, também chamado de processo init. Para isso, o kernel tenta executar os binários /sbin/init, /bin/init, /etc/init e /bin/sh. Você pode passar também o nome do programa de inicialização através do parâmetro init da linha de comandos do kernel. Exemplo: init=/usr/bin/init

186 A INICIALIZAÇÃO (cont.) Se nenhuma destes programas de inicialização forem encontrados, o kernel entra em pânico! Kernel panic not syncing: No init found. Assim que executado, o processo init é o responsável pela inicialização do restante do sistema.

187 VISÃO GERAL DO BOOT Bootloader Carrega o kernel para a RAM e inicia Kernel Monta o rootfs indicado por root= Inicia a aplicação init /sbin/init Inicia outros serviços e aplicações Shell Outras aplicações Rootfs

188 MECANISMOS DE INICIALIZAÇÃO Depois que o kernel chamou a aplicação init, é responsabilidade do rootfs o restante da inicialização do sistema. Existem diferentes mecanismos de inicialização, como systemd, upstart, openrc e sysvinit (System V Init). Devido à simplicidade de uso e utilização em soluções mais simples, vamos estudar aqui o sysvinit.

189 SYSTEM V INIT O sysvinit possui basicamente os seguintes componentes: Aplicação init (o pai de todos os processos). Arquivo de configuração /etc/inittab. Scripts de inicialização em /etc/init.d/ ou /etc/rc.d/.

190 /etc/inittab # Startup the system null::sysinit:/bin/mount t proc proc /proc null::sysinit:/bin/mkdir p /dev/pts # now run any rc scripts ::sysinit:/etc/init.d/rcs # Put a getty on the serial port ttysac0::respawn:/sbin/getty L ttysac vt100 # Stuff to do for the 3 finger salute ::ctrlaltdel:/sbin/reboot # Stuff to do before rebooting null::shutdown:/usr/bin/killall syslogd

191 /etc/init.d/rcs #!/bin/sh for i in /etc/init.d/s??*; do case "$i" in *.sh). $i ;; *) ;; $i start esac done

192 /etc/init.d/ ls l init.d/ total 8 rwxr xr x 1 root root :44 rcs rwxr xr x 1 root root :02 S01logging rwxr xr x 1 root root :44 S20urandom rwxr xr x 1 root root :44 S40network rwxr xr x 1 root root :05 S50dropbear rwxr xr x 1 root root :50 S60leds

193 CRIANDO UM ROOTFS BÁSICO Um sistema Linux precisa de um conjunto básico de programas para funcionar (init, shell, comandos básicos, etc). Normalmente estes programas são fornecidos em diferentes projetos e é trabalhoso integrar manualmente todos estes componentes. O Busybox é uma solução alternativa, trazendo uma quantidade grande e comum de programas usados em sistemas Linux, mas com tamanho reduzido, perfeito para sistemas embarcados!

194 APLICAÇÕES DISPONÍVEIS NO BUSYBOX [, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk, basename, bbconfig, bbsh, brctl, bunzip2, busybox, bzcat, bzip2, cal, cat, catv, chat, chattr, chcon, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devfsd, df, dhcprelay, diff, dirname, dmesg, dnsd, dos2unix, dpkg, dpkg_deb, du, dumpkmap, dumpleases, e2fsck, echo, ed, egrep, eject, env, envdir, envuidgid, ether_wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fetchmail, fgrep, find, findfs, fold, free, freeramdisk, fsck, fsck_minix, ftpget, ftpput, fuser, getenforce, getopt, getsebool, getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifup, inetd, init, inotifyd, insmod, install, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, lash, last, length, less, linux32, linux64, linuxrc, ln, load_policy, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lzmacat, makedevs, man, matchpathcon, md5sum, mdev, mesg, microcom, mkdir, mke2fs, mkfifo, mkfs_minix, mknod, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, openvt, parse, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, poweroff, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, renice, reset, resize, restorecon, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run_parts, runcon, runlevel, runsv, runsvdir, rx, script, sed, selinuxenabled, sendmail, seq, sestatus, setarch, setconsole, setenforce, setfiles, setfont, setkeycodes, setlogcons, setsebool, setsid, setuidgid, sh, sha1sum, showkey, slattach, sleep, softlimit, sort, split, start_stop_daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, top, touch, tr, traceroute, true, tty, ttysize, tune2fs, udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs, yes, zcat, zcip

195 LABORATÓRIO Gerando um rootfs simples e testando com NFS

196 Desenvolvendo Sistemas Linux Embarcado Kernel modules

197 KERNEL MONOLÍTICO E MICROKERNEL Embedded Kernel monolítico: o sistema operacional inteiro roda em kernel space, com total acesso aos recursos da máquina (CPU, memória e I/Os), e provê para as aplicações (userspace) uma interface de comunicação através de chamadas de sistema (system calls). Microkernel: apenas o básico do kernel roda em userspace (gerenciamento de memória e processos). O resto roda em userspace, incluindo sistemas de arquivos, device drivers, protocolos de rede, etc!

198 MONOLÍTICO X MICROKERNEL Embedded

199 O KERNEL LINUX O Linux é um kernel monolítico. Mas internamente o Linux é bem modular. Cada funcionalidade é abstraída em um módulo, com uma interface de comunicação bem definida. Por isso, permite um sistema de configuração onde você pode adicionar ou remover determinada funcionalidade. E o Linux permite que você adicione dinamicamente pedaços de código do kernel em tempo de execução! Chamamos esses pedaços de código de módulos do kernel.

200 VANTAGENS DOS MÓDULOS Ajuda a manter a imagem do kernel bem pequena. Módulos tornam fácil o desenvolvimento do kernel, como por exemplo device drivers, sem precisar reiniciar o equipamento. O tempo de boot fica menor: menos código para ser executado na inicialização do kernel. Cuidado: módulos rodam em kernel space. Uma vez carregados, eles tem total controle do sistema! Por isso só podem ser carregados como root.

201 COMPILANDO OS MÓDULOS Para compilar apenas os módulos, basta executar: make modules Para cross-compilar os módulos, não esqueça de indicar a arquitetura e o prefixo do cross-compiler. Exemplo: make ARCH=arm CROSS_COMPILE=arm linux modules

202 INSTALANDO OS MÓDULOS Para instalar os módulos nativamente, basta executar o comando abaixo: make modules_install No caso de um ambiente de compilação cruzada, os módulos devem ser instalados no rootfs do target. Para isso, devemos passar o parâmetro INSTALL_MOD_PATH no comando de instalação: make ARCH=<arch> INSTALL_MOD_PATH=<dir>/ modules_install

203 DEPENDÊNCIAS DOS MÓDULOS Alguns módulos dependem de outros módulos, que precisam ser carregados primeiro. Exemplo: o módulo usb_storage depende do módulo usbcore. As dependências entre os módulos estão descritas em /lib/modules/<kernel version>/modules.dep. Este arquivo é gerado quando você instala os módulos.

204 CARREGANDO UM MÓDULO O comando insmod carrega apenas um módulo. É necessário passar o caminho completo do módulo. insmod <module_path>.ko O comando modprobe carrega um módulo e todas as suas dependências. Deve-se passar apenas o nome do módulo, sem a extensão.ko e sem seu caminho completo. modprobe <module_name>

205 DESCARREGANDO UM MÓDULO O comando rmmod descarrega apenas um módulo. Possível apenas se o módulo não estiver mais em uso. Deve-se passar apenas o nome do módulo, sem a extensão.ko e sem seu caminho completo. rmmod <module_name> O comando modprobe descarrega um módulo e todas as suas dependências (que não estão sendo usadas). Deve-se passar apenas o nome do módulo, sem a extensão.ko e sem seu caminho completo. modprobe r <module_name>

206 LISTANDO INFORMAÇÕES DOS MÓDULOS O comando modinfo lê informações de um módulo, como sua descrição, parâmetros, licença e dependências. Deve-se passar apenas o nome do módulo, sem a extensão.ko e sem seu caminho completo. modinfo <module_name> O comando lsmod lista todos os módulos carregados. lsmod

207 PASSANDO PARÂMETROS Descobrindo os parâmetros disponíveis do módulo: modinfo <module> Passando um parâmetro via insmod: insmod <module> param=value Para passar um parâmetro via modprobe, configurar o parâmetro em /etc/modprobe.conf ou em qualquer arquivo em /etc/modprobe.d/: options <module> param=value Para passar um parâmetro via linha de comandos do kernel: <module>.param=value

208 LOGS DO KERNEL O kernel mantém um log de mensagens na memória em um buffer circular. Quando um novo módulo é carregado, informações relevantes são enviadas ao log do kernel. Este log de mensagens pode ser exibido através do comando dmesg (diagnostic message). Mensagens de log também são exibidas na console.

209 LABORATÓRIO Compilando, instalando e carregando módulos

210 Desenvolvendo Sistemas Linux Embarcado Sistemas de Arquivo

211 SISTEMAS DE ARQUIVO Um sistema de arquivo é uma representação dos dados dentro de um dispositivo de armazenamento. Exemplos de sistemas de arquivo: FAT, NTFS, EXT2, EXT3, JFFS2. Mas por que existem diferentes sistemas de arquivo? Performance. Segurança. Economia de espaço em disco. Uso em diferentes tipos de dispositivo de armazenamento.

212 DISPOSITIVOS DE ARMAZENAMENTO No Linux, os dispositivos de armazenamento são classificados em dois tipos: dispositivos de bloco e memórias flash. Isso porque, dentro do kernel, eles são manipulados por sub-sistemas diferentes: Dispositivos de bloco podem ser lidos ou escritos normalmente sem a necessidade de apagar antes, e virtualmente não possuem limites de escrita. Exemplo: HD. Memórias flash trabalham em blocos e para serem escritas precisam ser apagadas antes. Exemplo: flash NAND. Por este motivo, vamos estudar estes dois sub-sistemas separadamente.

213 LISTANDO DISPOSITIVOS DE BLOCO Uma lista com todos os dispositivos de bloco disponíveis no sistema pode ser obtido em /proc/partitions: cat /proc/partitions major minor #blocks name sda sda sda sda3

214 SISTEMAS DE ARQUIVO TRADICIONAIS Embedded Existem sistemas de arquivo específicos para dispositivos de bloco. E tudo começou com o tradicional sistema de arquivo ext2, presente no Linux desde praticamente as primeiras versões. É um sistema de arquivo bem estável, mas com um grande problema: pode deixar o sistema em um estado inconsistente após um crash ou um reboot não esperado, fazendo com que o sistema precise usar ferramentas de verificação de disco no próximo boot (fsck.ext2).

215 SISTEMAS DE ARQUIVO TRADICIONAIS (cont.) É o mesmo caso do vfat, a implementação do sistema de arquivo FAT no Linux. Quem nunca precisou executar um Scandisk depois de um reboot inesperado no DOS ou no Windows!? O ext2 foi usado durante um bom tempo no Linux (quase 10 anos). Então começaram a aparecer alguns sistemas de arquivo com uma característica especial chamada de journaling.

216 JOURNALING Um sistema de arquivo com journal foi projetado para manter a consistência dos dados mesmo após um crash do sistema ou um reboot inesperado. User space Kernel space Aplicação Escreve uma entrada no journal Escreve no arquivo Todas as alterações são salvas em um journal (uma espécie de log) antes de serem aplicadas no arquivo. Escreve no arquivo Limpa entrada no journal

217 JOURNALING (cont.) Reboot Descarta entradas incompletas no journal Não Journal vazio? Sim Devido ao mecanismo de journaling, o sistema de arquivo nunca fica em um estado inconsistente (corrompido). Os últimos dados salvos, no entanto, podem ser perdidos. Executa journal Sistema de arquivo OK

218 SISTEMAS DE ARQUIVO COM JOURNALING O ext3 foi o padrão para sistemas de arquivo com journal durante um bom tempo. Ele é basicamente o ext2 com a funcionalidade de journaling. O ext4 é a nova geração com muitas melhorias, e é o sistema de arquivo padrão das distribuições Linux atuais. O btrfs (também chamado de ButterFS ) é a próxima geração e visa substituir o ext4. Já esta disponível na árvore oficial do kernel, mas ainda em estado experimental. Existem muitos outros sistemas de arquivo com journaling, incluindo reiserfs, JFS e XFS, que possuem aplicações específicas, como por exemplo trabalhar com arquivos muito pequenos ou com carga de trabalho muito alta.

219 QUAL ESCOLHER? Na prática, você usará o ext3 ou o ext4 em dispositivos de bloco. Para dispositivos de bloco que usam memória flash (cartão SD/MMC, pendrive, etc), você pode querer desabilitar o journaling ou usar o ext2 para limitar a quantidade de escritas geradas pelo journal. Você só usará o vfat e o ntfs se quiser manter interoperabilidade com sistemas Windows. Sistemas de arquivo como o reiserfs, o JFS e o XFS são usados normalmente em servidores, e tem pouca aplicação em Linux embarcado.

220 SISTEMAS DE ARQUIVO COMPRIMIDOS Embedded Sistemas embarcados possuem normalmente poucos recursos de armazenamento. Por este motivo, você pode querer usar um sistema de arquivo que comprima os dados, deixando o tamanho da imagem do sistema de arquivo menor, e ocupando menos espaço no dispositivo de armazenamento. Um sistema de arquivo comprimido, como o próprio nome diz, armazena os dados de forma comprimida no dispositivo de armazenamento. Como algoritmos para escrever de forma comprimida são bem mais complicados de implementar sem afetar a performance e a confiabilidade do sistema, boa parte dos sistemas de arquivo comprimidos são de apenas leitura.

221 CRAMFS O CramFS (Compressed ROM Filesystem) é um exemplo de sistema de arquivo comprimido de apenas leitura, desenvolvido especialmente para sistemas embarcados ou dispositivos com baixa capacidade de armazenamento. Os dados são comprimidos com a biblioteca zlib, suportando arquivos de até 16M, e com tamanho máximo total da imagem de até 256MB. Você só vai precisar do CramFS se seu kernel for muito antigo (anterior à versão ).

222 SQUASHFS O SquashFS é uma espécie de sucessor do CramFS, visando atingir os mesmos objetivos, mas com melhor compressão, melhor performance de leitura e suporte à arquivos e sistemas maiores. Gera um sistema de arquivo em torno de 3 vezes menor que o ext3. Muito usado em sistemas embarcados para partições que podem ser apenas de leitura (kernel, binários, etc). Usado também em distribuições que rodam direto de um pendrive ou CD/DVD (Live CD).

223 SISTEMAS DE ARQUIVO VOLÁTEIS Quando trabalhamos com Linux embarcado, às vezes precisamos criar arquivos temporários, armazenar informações de processos em execução, fazer log, etc. Fazer isso em um dispositivo de armazenamento pode ser muito custoso, envolve operações de I/O e pode consumir a vida útil do dispositivo no caso de memórias flash. Outro ponto é que estas informações são voláteis, ou seja, não tem mais utilidade após o boot. São nestes casos que usamos sistemas de arquivo voláteis.

224 SISTEMAS DE ARQUIVO VOLÁTEIS (cont.) Com um sistema de arquivo volátil, você consegue manter um diretório do sistema montado em RAM. Ou seja, tudo o que você escrever neste diretório, vai para a memória RAM! Consequentemente, você irá perder estas informações no boot do equipamento. Mas é a solução perfeita para armazenar dados e arquivos temporários. O sistema de arquivo volátil padrão no Linux atualmente é o tmpfs.

225 TMPFS O tmpfs é um sistema de arquivo útil para armazenar dados temporários em RAM (arquivos temporários, logs, etc). Não gasta muita RAM, cresce e diminui automaticamente conforme o uso (configurável durante a montagem). Como usar: mount t tmpfs tmp /tmp Para mais informações, veja a documentação no kernel: Documentation/filesystems/tmpfs.txt

226 MISTURANDO TUDO Você pode dividir seu dispositivo de bloco em partições: Uma partição squashfs para o rootfs (kernel, binários, etc). Salva espaço, e por ser apenas leitura, fica protegido de alterações acidentais no sistema de arquivos. Uma partição ext3 para leitura e escrita de dados do usuário e de configuração. Dados temporários em RAM com o tmpfs. squashfs rootfs comprimido ext3 dados e configuração Tmpfs dados voláteis RAM Dispositivo de Bloco

227 LABORATÓRIO Iniciando o rootfs de um dispositivo de bloco

228 MEMÓRIAS FLASH Algumas limitações diferem as memórias flash de dispositivos de bloco tradicionais como HDs. As memórias flash só podem ser apagadas em blocos. Estes blocos são chamados de erase blocks, e podem variar de algumas dezenas para algumas centenas de KB. Quando você apaga um bloco da flash, todos os bits assumem tipicamente o valor 1. Com um bloco apagado, você pode escrever em qualquer posição da flash. Porém, se você escrever 0 em qualquer um dos bits de qualquer posição da flash, você só consegue fazê-lo voltar para 1 apagando todo o bloco correspondente da flash!

229 MEMÓRIAS FLASH (cont.) Outra limitação das memórias flash é a quantidade de vezes que você pode apagar e escrever nela (program/erase cycles). Esta limitação, dependendo do modelo e do fabricante da flash, pode variar entre e ciclos. Parece muito, mas basta você deixar sua aplicação fazendo log em memória flash para transformá-la em um peso de papel! É por este motivo que existe uma funcionalidade chamada wear leveling, que minimiza o problema, e que pode ser implementada por software ou diretamente em chips controladores de flash.

230 MEMÓRIAS FLASH (cont.) Mesmo assim, depois de certo tempo de uso da flash, um ou mais blocos serão inutilizados. Por este motivo, existe uma técnica chamada de BBM (Bad Block Management). Quando sai de fábrica, as memórias flash já possuem gravada nelas uma tabela de bad blocks. Toda camada de software que trabalha com memórias flash deve ser capaz de ler e identificar estes bad blocks para não utilizar regiões inválidas da flash.

231 TIPOS DE MEMÓRIAS FLASH Além destas características especiais, existem basicamente dois tipos de memória flash: Flash NOR: Acesso aleatório para leitura de dados (byte a byte), velocidade alta para leitura mas lenta para apagar e escrever, baixa densidade, menor durabilidade, alto custo por MB. Usada para armazenar código, substituir ROM. Flash NAND: Acesso de leitura em blocos, velocidade baixa para leitura mas alta para apagar e escrever, alta densidade, maior durabilidade, baixo custo por MB. Usada para armazenar dados. É por causa de todas estas características e limitações das memórias flash que existe um sub-sistema específico no kernel chamado de MTD para tratar memórias flash.

232 MTD (MEMORY TECHNOLOGY DEVICES) Embedded MTD User modules Interface com o sistema de arquivos ubifs jffs2 yaffs2 Char device Read-only block device Block device MTD Chip drivers NOR flash RAM chips Block device Virtual memory NAND flash DiskOnChip flash ROM chips Virtual devices Hardware

233 CAMADAS DO SUB-SISTEMA MTD A camada de baixo (MTD chip drivers) conversa diretamente com o hardware, enquanto que a camada de cima (MTD user modules) implementa os diferentes sistemas de arquivo e mecanismos de acesso à flash. Cada memória tem o seu MTD chip driver para possibilitar o acesso ao hardware da flash. Mas cada sistema pode usar um ou mais MTD user modules. Cada um dos MTD user modules irá tratar de forma diferente a flash. É neste contexto que as memórias flash também são chamadas de dispositivos MTD.

234 MTDCHAR O driver mtdchar implementa o módulo "char device" da flash. Ele cria um dispositivo de caractere para cada partição de um dispositivo MTD no sistema, normalmente chamado de /dev/mtdx, onde X é o número da partição. Com este módulo, você tem acesso sequencial (byte a byte) de toda a flash. Além disso, ele disponibiliza comandos ioctl() para você poder manipular a flash (ler informações, apagar/gravar na flash, etc). A principal utilidade deste módulo é no gerenciamento da flash, quando usamos o pacote mtd-utils.

235 MTD-UTILS O mtd-utils é um conjunto de ferramentas para manipular dispositivos MTD: mtdinfo retorna informações detalhadas do dispositivo. flash_eraseall apaga todo o dispositivo. flashcp escreve em memórias flash NOR. nandwrite escreve um memórias flash NAND. mkfs.jffs2 e mkfs.ubifs cria os respectivos sistemas de arquivo na flash. Para mais informações consulte o site do projeto:

236 MTDBLOCK O driver mtdblock implementa o módulo "block device" da flash. Ele cria um dispositivo de bloco para cada partição de um dispositivo MTD no sistema, normalmente nomeado /dev/mtdblockx, onde X é o número da partição. Este módulo permite acesso de leitura/escrita por bloco, como se fosse um HD mesmo, mas não gerencia bad blocks e também não trabalha com wear leveling em escritas. Portanto, se você quiser um sistema de arquivo que trabalhe com todas as limitações da flash, incluindo bad blocks e wear leveling, você vai precisar de um sistema de arquivo específico para flash.

237 JFFS2 É um dos sistemas de arquivo para flash mais antigos ainda em utilização. Vantagens: compressão em tempo de execução (economiza espaço), confiabilidade, wear leveling e algoritmo ECC. Desvantagens: não escala muito bem em memórias flash com capacidades muito grandes. O kernel precisa varrer todo o sistema de arquivo no momento da montagem. Habilitando no kernel a opção CONFIG_JFFS2_SUMMARY reduz drasticamente este tempo de montagem.

238 YAFFS2 É um dos sucessores do JFFS2, com o objetivo de corrigir os problemas de performance em memórias flash muito grandes. Vantagens: tempo de boot rápido, confiabilidade, wear leveling e algoritmo ECC. Desvantagens: suporta apenas memórias flash NAND e não comprime os dados.

239 UBIFS Evolução do jffs2, dos mesmos desenvolvedores do mtd-utils, disponível a partir do kernel Trabalha com volumes lógicos em cima de dispositivos MTD. Overhead de metadata em partições pequenas. Mas com a capacidade das memórias flash aumentando cada vez mais, deve se tornar nos próximos anos o sistema de arquivo padrão para dispositivos MTD.

240 DICAS PARA TRABALHAR COM FLASH Embedded Não use a memória flash como região de swap! Não use a memória flash para armazenamento volátil como logs e arquivos temporários (use tmpfs nestes casos). Monte seu rootfs como apenas leitura, ou use o squashfs, quando possível. Use a opção de montagem noatime para evitar atualizar o sistema de arquivos toda vez que você acessa um arquivo. Não use a opção de montagem sync (atualização escreve imediatamente no sistema de arquivo).

241 ESCOLHENDO O SISTEMA DE ARQUIVO Embedded Dados Voláteis? Não Somente Leitura? Não Dispositivo Bloco Tem flash? Sim Sim squashfs MTD Sim ext2 (noatime) Não tmpfs ubifs ou jffs2 ext3 ou ext4

242 LABORATÓRIO Iniciando o rootfs da memória flash

243 Desenvolvendo Sistemas Linux Embarcado Build system

244 O DESAFIO: INTEGRAR TUDO ISSO Biblioteca Biblioteca Biblioteca Biblioteca Toolchain Biblioteca C Linux kernel Bootloader Hardware

245 O DESAFIO: INTEGRAR TUDO ISSO (cont.) u-boot.bin uimage rootfs.img

246 INTEGRANDO TUDO O que vimos até aqui foi um passo-a-passo de como desenvolver um sistema Linux embarcado do zero. Na prática, não precisamos desenvolver um sistema Linux manualmente, ja que é uma atividade trabalhosa, demorada e suscetível à erros. Portanto, temos normalmente duas possíveis soluções para trabalhar no desenvolvimento de sistemas com Linux embarcado: 1. Usar uma distribuição Linux pronta. 2. Usar um sistema de build (build system).

247 DISTRIBUIÇÃO PRONTA Existem diversas distribuições comerciais prontas para Linux embarcado: MontaVista, Timesys Linux, Wind River Linux, etc. Existem também diversas soluções abertas, incluindo Android, Emdebian, Ubuntu embedded, Tizen, Angstrom, Meego, etc. Vantagens: Simplicidade de uso. Facilidade na instalação de novos pacotes. Framework de desenvolvimento pronto e funcional.

248 DISTRIBUIÇÃO PRONTA (cont.) Desvantagens: Falta flexibilidade (compatibilidade com plataforma de hardware, mecanismo de inicialização, framework de desenvolvimento disponível, erros em pacotes da distribuição, etc). Normalmente o rootfs é grande, ocupa muito espaço no dispositivo de armazenamento. Tempo de boot normalmente alto. Requer customização para deixar o sistema mais leve. Difícil de levantar quais pacotes open source são usados.

249 BUILD SYSTEM O build system permite gerar um sistema Linux completo do zero. Ele automatiza o processo de geração dos diversos componentes do sistema, incluindo o toolchain, o kernel, o bootloader, as bibliotecas e as aplicações. Normalmente já contém um conjunto grande de pacotes configurados para serem habilitados e utilizados pelo seu sistema. E facilita o trabalho de adicionar novos pacotes se necessário.

250 BUILD SYSTEM (cont.) Vantagens: Flexibilidade. O processo de build torna-se reproduzível, facilitando o trabalho de recompilação, correção de problemas e adição de novas funcionalidades. Desvantagens: Tempo extra para configurar a ferramenta. É necessário conhecimento do funcionamento da ferramenta e de mecanismos de compilação para adicionar novos pacotes se necessário e corrigir possíveis erros de compilação.

251 FERRAMENTAS Buildroot, desenvolvido pela comunidade: PTXdist, desenvolvido pela empresa Pengutronix: LTIB, desenvolvido principalmente pela Freescale:

252 FERRAMENTAS (cont.) OpenEmbedded, mais flexível (e também mais complexo): Yocto, evolução do OpenEmbedded: Sistemas comerciais (MontaVista, WindRiver, Timesys).

253 LTIB LTIB (Linux Target Image Builder) é uma ferramenta usada para desenvolver e liberar BSPs (Board Support Packages). Projeto inicialmente patrocionado pela Freescale, suporta gerar imagens para ARM, PPC e Coldfire. Permite gerar imagens do bootloader, kernel e rootfs. Usa o sistema de pacotes RPM, e possui em torno de 200 aplicações/bibliotecas disponíveis.

254 BUILDROOT Desenvolvido pelos mesmos mantenedores da uclibc. Possibilita gerar o toolchain, o bootloader, o kernel e o rootfs com muitas bibliotecas e aplicações disponíveis. Mais de 700 aplicações e bibliotecas integradas, de utilitários básicos à bibliotecas mais elaboradas como X.org, Qt, Gtk, Webkit, Gstreamer, etc. Ótima solução para projetos pequenos e médios. Desde a versão um novo release é liberado a cada 3 meses.

255 CONFIGURANDO O BUILDROOT Permite configurar, dentre outras opções: Arquitetura e modelo da CPU. Toolchain. Bootloader. Kernel. Bibliotecas e aplicações. Tipos das imagens do rootfs (ext2, jffs2, etc). Para configurar: make menuconfig

256 CONFIGURANDO O BUILDROOT Embedded

Desenvolvimento para Sistemas Embarcados (CEA 513) Conceitos Gerais

Desenvolvimento para Sistemas Embarcados (CEA 513) Conceitos Gerais Universidade Federal de Ouro Preto Departamento de Computação e Sistemas - DECSI Desenvolvimento para Sistemas Embarcados (CEA 513) Conceitos Gerais Vicente Amorim vicente.amorim.ufop@gmail.com Sumário

Leia mais

Programação de Periféricos

Programação de Periféricos Programação de Periféricos Componentes Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Apresentação Raspberry pi Sistema Operacional embarcado Atividade Raspberry pi Sistema computacional

Leia mais

Sistemas Embarcados. Filesystem Hierarchy Standard (FHS) Root filesystem. Aula 06

Sistemas Embarcados. Filesystem Hierarchy Standard (FHS) Root filesystem. Aula 06 Introdução Sistemas Embarcados Root File System Linux (kernel) é apenas uma parte de um sistema embarcado Preciso executa a inicialização do sistema e de aplicações Necessário montar o sistema de arquivos

Leia mais

Usuários. Aplicativos e programas dos usuários. Kernel gerenciamento de processos, memória, sistema de arquivos, I/O, etc.

Usuários. Aplicativos e programas dos usuários. Kernel gerenciamento de processos, memória, sistema de arquivos, I/O, etc. 1 1.0 Kernel O kernel (núcleo) representa o coração do Sistema Operacional. Atribuições do kernel: - gerenciamento dos arquivos em disco; - inicializar programas e executá-los; - alocar e gerenciar memória

Leia mais

Sistemas Embarcados. Tarefas básicas de um bootloader. Configurações genéricas de boot. Aula 05

Sistemas Embarcados. Tarefas básicas de um bootloader. Configurações genéricas de boot. Aula 05 Introdução Sistemas Embarcados Bootloaders Bootloader é um componente fundamental Faz a inicialização do hardware e carrega o sistema operacional Difere entre sistemas embarcados e desktops Ainda que sejam

Leia mais

Webinar Freescale Desenvolvimento de sistemas embarcados em Linux com a Thunderboard 11/12/2013

Webinar Freescale Desenvolvimento de sistemas embarcados em Linux com a Thunderboard 11/12/2013 Webinar Freescale Desenvolvimento de sistemas embarcados em Linux com a Thunderboard 11/12/2013 Índice Sobre a Thunderboard Descrição do produto System on Module (SoM) MDP i.mx28 Aplicações Vantagens BSP

Leia mais

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO LABORATÓRIO DE SISTEMAS OPERACIONAIS PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO Sistema Operacional Conteúdo retirado do livro Sistemas Operacionais Marcos Aurélio Pchek Laureano Diogo Roberto Olsen

Leia mais

Tutorial BuildRoot. Meu Primeiro Linux embarcado: Programação de Periféricos CC FACIN PUCRS

Tutorial BuildRoot. Meu Primeiro Linux embarcado: Programação de Periféricos CC FACIN PUCRS Tutorial BuildRoot Programação de Periféricos CC FACIN PUCRS Configuração do Ambiente de Trabalho: 1. Criar um diretório de trabalho: Ex: mkdir ~/buildroot 2. Ir para o diretório de trabalho: Ex: cd ~/buildroot

Leia mais

Partição Partição primária: Partição estendida: Discos básicos e dinâmicos

Partição Partição primária: Partição estendida: Discos básicos e dinâmicos Partição Parte de um disco físico que funciona como se fosse um disco fisicamente separado. Depois de criar uma partição, você deve formatá-la e atribuir-lhe uma letra de unidade antes de armazenar dados

Leia mais

Estrutura de um Sistema Linux Moderno Padrões de um Sistema Linux. Prof. Claudio Silva

Estrutura de um Sistema Linux Moderno Padrões de um Sistema Linux. Prof. Claudio Silva Estrutura de um Sistema Linux Moderno Padrões de um Sistema Linux Estrutura de um Sistema Linux Por ter sua origem universitária, a forma como o Linux foi concebido é de perfeito agrado para o seu estudo.

Leia mais

Distribuições de Linux embarcado. O mercado de Linux embarcado. Distribuição Linux: desktop x embarcados. Projeção do mercado de Linux embarcado

Distribuições de Linux embarcado. O mercado de Linux embarcado. Distribuição Linux: desktop x embarcados. Projeção do mercado de Linux embarcado Linux Sistemas Embarcados Introdução ao Linux embarcado e aspectos de software livre Aula 02 É um núcleo, não um sistema operacional Altamente modulável usado desde servidores a equipamentos dedicados

Leia mais

Everson Scherrer Borges João Paulo de Brito Gonçalves

Everson Scherrer Borges João Paulo de Brito Gonçalves Everson Scherrer Borges João Paulo de Brito Gonçalves 1 Introdução ao Linux e Instalação do Ubuntu Linux História Em 1973, um pesquisador da Bell Labs, Dennis Ritchie, reescreveu todo o sistema Unix numa

Leia mais

Kernel Linux. Trabalho Realizador Por: Tiago Conceição Nº 11903. Representação artística do núcleo Linux

Kernel Linux. Trabalho Realizador Por: Tiago Conceição Nº 11903. Representação artística do núcleo Linux Kernel Linux Representação artística do núcleo Linux Trabalho Realizador Por: Tiago Conceição Nº 11903 Índice Introdução...2 O que é o Kernel...3 Como surgiu...4 Para que serve...5 Versões...6 Versões

Leia mais

03/11/2011. Apresentação. SA do Linux. Sistemas de Arquivos. Curso Tecnologia em Telemática. Disciplina Administração de Sistemas Linux

03/11/2011. Apresentação. SA do Linux. Sistemas de Arquivos. Curso Tecnologia em Telemática. Disciplina Administração de Sistemas Linux Apresentação Administração de Sistemas Curso Tecnologia em Telemática Disciplina Administração de Sistemas Linux Professor: Anderson Costa anderson@ifpb.edu.br Assunto da aula Aspectos do Sistema de Arquivos

Leia mais

Para continuar, baixe o linux-vm aqui: http://www.gdhpress.com.br/downloads/linux-vm.zip

Para continuar, baixe o linux-vm aqui: http://www.gdhpress.com.br/downloads/linux-vm.zip Se, assim como a maioria, você possui um único PC ou notebook, uma opção para testar as distribuições Linux sem precisar mexer no particionamento do HD e instalar o sistema em dualboot, é simplesmente

Leia mais

Campus - Cachoeiro Curso Técnico de Informática. Sistema de Arquivos. Prof. João Paulo de Brito Gonçalves

Campus - Cachoeiro Curso Técnico de Informática. Sistema de Arquivos. Prof. João Paulo de Brito Gonçalves Campus - Cachoeiro Curso Técnico de Informática Sistema de Arquivos Prof. João Paulo de Brito Gonçalves Introdução É com o sistema de arquivos que o usuário mais nota a presença do sistema operacional.

Leia mais

Projeto de extensão Linux no Campus

Projeto de extensão Linux no Campus Projeto de extensão Linux no Campus Universidade Federal de Santa Maria Acadêmico do Curso de Sistemas de Informação Evandro Bolzan Contatos: ebolzan@inf.ufsm.br, http://www.inf.ufsm.br/~ebolzan BUG BUG

Leia mais

>>> OBJETIVOS... === FHS - Filesystem Hierarchy Standard. === Sistemas de arquivos e Partições

>>> OBJETIVOS... === FHS - Filesystem Hierarchy Standard. === Sistemas de arquivos e Partições >>> OBJETIVOS... === FHS - Filesystem Hierarchy Standard === Sistemas de arquivos e Partições >>> FHS - Filesystem Hierarchy Standard >Padrão de organização de pastas e arquivos em Sistemas Unix-Like >organizar

Leia mais

Laboratório de Redes de Computadores e Sistemas Operacionais

Laboratório de Redes de Computadores e Sistemas Operacionais Laboratório de Redes de Computadores e Sistemas Operacionais O Sistema de Arquivos Fabricio Breve O que você encontra no Sistema de Arquivos do Linux... Processos Portas seriais Canais de comunicação entre

Leia mais

Introdução ao Linux. Professor Breno Leonardo G. de M. Araújo

Introdução ao Linux. Professor Breno Leonardo G. de M. Araújo Introdução ao Linux Professor Breno Leonardo G. de M. Araújo Sistema Operacional Linux Embora o Sistema Operacional Microsoft Windows ainda seja predominante no mercado de desktops e Notebooks,já é, bastante

Leia mais

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

Software Livre. Acesso ao código fonte Alterar o código fonte Redistribuir Utilizar como desejar Software Livre Acesso ao código fonte Alterar o código fonte Redistribuir Utilizar como desejar Linux Licença GPL (Licença Pública Geral) Linux Licença GPL (Licença Pública Geral) - A liberdade de executar

Leia mais

Faculdades Senac Pelotas

Faculdades Senac Pelotas Faculdades Senac Pelotas Curso Superior de Tecnologia em Redes de Computadores Introdução a informática Alunos Daniel Ferreira, Ícaro T. Vieira, Licurgo Nunes Atividade 4 Tipos de Arquivos Sumário 1 Tipos

Leia mais

Administração de Redes Linux. Unidade 1 - LINUX

Administração de Redes Linux. Unidade 1 - LINUX Administração de Redes Linux Unidade 1 - LINUX Breve Histórico O Linux é um sistema operacional moderno e gratuito, baseado nos padrões UNIX. Desenvolvido inicialmente em 1991 como um KERNEL PEQUENO E

Leia mais

Introdução ao Linux: Parte I

Introdução ao Linux: Parte I Data: Introdução ao Linux: Parte I Marcelo Ribeiro Xavier da Silva marceloo@inf.ufsc.br Histórico 3 Origem do GNU Linux Em 1983, Richard Stallman fundou a Free Software Foundation, com o intuito de criar

Leia mais

Toolkit para Linux Embarcado. Autor: Thiago Waltrik Orientador: Miguel Alexandre Wisintainer

Toolkit para Linux Embarcado. Autor: Thiago Waltrik Orientador: Miguel Alexandre Wisintainer Toolkit para Linux Embarcado Autor: Thiago Waltrik Orientador: Miguel Alexandre Wisintainer Roteiro Introdução Fundamentação Teórica Objetivos Trabalhos Correlatos Desenvolvimento Requisitos Especificação

Leia mais

Informática I. Aula 19. http://www.ic.uff.br/~bianca/informatica1/ Aula 19-20/11/06 1

Informática I. Aula 19. http://www.ic.uff.br/~bianca/informatica1/ Aula 19-20/11/06 1 Informática I Aula 19 http://www.ic.uff.br/~bianca/informatica1/ Aula 19-20/11/06 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Adelman Wallyson de Sousa Benigno

Adelman Wallyson de Sousa Benigno Laboratory of Software Engineering and Computer Network Universidade Federal do Maranhão Curso de Engenharia Elétrica Engineering for a better life LINUX Trabalho apresentado ao Prof. Denivaldo Lopes Adelman

Leia mais

Introdução ao Linux MICHELLE NERY

Introdução ao Linux MICHELLE NERY Introdução ao Linux MICHELLE NERY O que é preciso saber para conhecer o Linux? Entender os componentes de um computador. Conhecimentos básicos de sistemas operacionais. Referência: Sistemas Operacionais

Leia mais

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO LABORATÓRIO DE SISTEMAS OPERACIONAIS PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO O Linux se refere aos itens de hardware como dispositivos (devices), e os referencia como arquivos. Os arquivos de

Leia mais

Introdução a Sistemas Abertos

Introdução a Sistemas Abertos Introdução a Sistemas Abertos Apresentação filipe.raulino@ifrn.edu.br Sistemas Abertos Qualquer programa de computador que pode ser usado, copiado, estudado e redistribuído inclusive com seu código fonte

Leia mais

Yocto Project. reduzindo "time to market" do seu próximo produto. Otavio Salvador otavio@ossystems.com.br

Yocto Project. reduzindo time to market do seu próximo produto. Otavio Salvador otavio@ossystems.com.br Yocto Project reduzindo "time to market" do seu próximo produto Otavio Salvador otavio@ossystems.com.br Otavio Salvador Desenvolvedor Debian Gerente de Release: Debian Installer (por 3 releases) GNU Parted

Leia mais

Curso GNU/Linux. Instalação do Linux...2 O HD não possui nenhuma partição...3. Existe apenas uma partição com espaço livre...3

Curso GNU/Linux. Instalação do Linux...2 O HD não possui nenhuma partição...3. Existe apenas uma partição com espaço livre...3 Cesar Kállas - cesarkallas@gmx.net Curso GNU/Linux Realização CAECOMP Puc Campinas 2004 Capítulo 3 Instalação do Linux...2 O HD não possui nenhuma partição...3 O HD tem espaço livre não particionado...3

Leia mais

16:21:50. Introdução à Informática com Software Livre

16:21:50. Introdução à Informática com Software Livre 16:21:50 Introdução à Informática com Software Livre 1 16:21:50 Hardware & Software 2 16:21:50 Hardware Hardware é a parte física de um computador, é formado pelos componentes eletrônicos, como por exemplo,

Leia mais

Julgue os itens a seguir referentes a conceitos de software livre e licenças de uso, distribuição e modificação.

Julgue os itens a seguir referentes a conceitos de software livre e licenças de uso, distribuição e modificação. Julgue os itens a seguir referentes a conceitos de software livre e licenças de uso, distribuição e modificação. 1.Todo software livre deve ser desenvolvido para uso por pessoa física em ambiente com sistema

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Prof. Jó Ueyama Apresentação baseada nos slides da Profa. Dra. Kalinka Castelo Branco, do Prof. Dr. Antônio Carlos Sementille, da Profa. Dra. Luciana A. F. Martimiano e nas transparências

Leia mais

6 - Gerência de Dispositivos

6 - Gerência de Dispositivos 1 6 - Gerência de Dispositivos 6.1 Introdução A gerência de dispositivos de entrada/saída é uma das principais e mais complexas funções do sistema operacional. Sua implementação é estruturada através de

Leia mais

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

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 05 Estrutura e arquitetura do SO Parte 1 Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC,

Leia mais

Construindo um Linux Parte 1 - Disk Boot Objetivo: Entender que o Linux é como um LEGO (Pode ser montado).

Construindo um Linux Parte 1 - Disk Boot Objetivo: Entender que o Linux é como um LEGO (Pode ser montado). Construindo um Linux Parte 1 - Disk Boot Objetivo: Entender que o Linux é como um LEGO (Pode ser montado). Os disquetes Linux são úteis em diversas situações, tais como: Testes de um novo kernel; Recuperação

Leia mais

Aula 01 Visão Geral do Linux

Aula 01 Visão Geral do Linux Instituto Federal de Educação, Ciência e Tecnologia de Santa Catarina Administração de Redes de Computadores Aula 01 Visão Geral do Linux Prof. Gustavo Medeiros de Araujo Profa.

Leia mais

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc.

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc. Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software Prof. MSc. Hugo Souza Continuando nossas aulas relativas ao Módulo 1, veremos a seguir

Leia mais

Sistemas Operacionais. Andrique Amorim www.andrix.com.br professor@andrix.com.br. Gerência de Arquivos

Sistemas Operacionais. Andrique Amorim www.andrix.com.br professor@andrix.com.br. Gerência de Arquivos Andrique Amorim www.andrix.com.br professor@andrix.com.br Gerência de Arquivos Gerência de Arquivos Um sistema operacional tem por finalidade permitir que o usuários do computador executem aplicações,

Leia mais

Estudo de Caso 2: Windows Vista

Estudo de Caso 2: Windows Vista Faculdades Integradas de Mineiros Curso de Sistemas de Informação Sistemas Operacionais II Estudo de Caso 2: Windows Vista Grupo 4 Helder / Wagner / Frantyeis Junho/2010 O Windows usa uma estratégia Just-In-Time

Leia mais

Google File System. Danilo Silva Marshall Érika R. C. de Almeida

Google File System. Danilo Silva Marshall Érika R. C. de Almeida Google File System Danilo Silva Marshall Érika R. C. de Almeida Tópicos abordados Sistemas de arquivos Sistemas de arquivos distribuídos Google File System Gmail File System Linux Windows Gspace Referências

Leia mais

I N F O R M Á T I C A. Sistemas Operacionais Prof. Dr. Rogério Vargas Campus Itaqui-RS

I N F O R M Á T I C A. Sistemas Operacionais Prof. Dr. Rogério Vargas Campus Itaqui-RS I N F O R M Á T I C A Sistemas Operacionais Campus Itaqui-RS Sistemas Operacionais É o software que gerencia o computador! Entre suas funções temos: inicializa o hardware do computador fornece rotinas

Leia mais

Primeiros Passos para Embarcar Linux em Sistemas Baseados em Processadores ARM

Primeiros Passos para Embarcar Linux em Sistemas Baseados em Processadores ARM Primeiros Passos para Embarcar Linux em Sistemas Baseados em Processadores ARM Prof. Wagner Augusto Pires Coimbra Agenda Parte I: Entendendo os Problemas Parte II: Um Exemplo de Solução (com demonstrações)

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Sistema Operacional Unidade 2 - Estrutura, dispositivos e sistema de arquivos do Linux

Sistema Operacional Unidade 2 - Estrutura, dispositivos e sistema de arquivos do Linux Sistema Operacional Unidade 2 - Estrutura, dispositivos e sistema de arquivos do Linux Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 ESTRUTURA DE DIRETÓRIOS LINUX... 3 SISTEMA DE ARQUIVOS E PARTICIONAMENTO...

Leia mais

Informática Fácil NOÇÕES DE LINUX. Prof.: Adelson Gomes Ferraz Antonio Carlos Reis

Informática Fácil NOÇÕES DE LINUX. Prof.: Adelson Gomes Ferraz Antonio Carlos Reis Informática Fácil NOÇÕES DE LINUX Prof.: Adelson Gomes Ferraz Antonio Carlos Reis Cronologia 1. 1969 Univ Berkeley, Califórnia, cria-se o SO UNIX para uso geral em grandes computadores 1. Década de 70

Leia mais

Revisão Aula 3. 1. Explique a MBR(Master Boot Record)

Revisão Aula 3. 1. Explique a MBR(Master Boot Record) Revisão Aula 3 1. Explique a MBR(Master Boot Record) Revisão Aula 3 1. Explique a MBR(Master Boot Record). Master Boot Record Primeiro setor de um HD (disco rígido) Dividido em duas áreas: Boot loader

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUDESTE DE MINAS GERAIS Campus Rio Pomba. Eu defendo!!! Mini Curso. Linux

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUDESTE DE MINAS GERAIS Campus Rio Pomba. Eu defendo!!! Mini Curso. Linux INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUDESTE DE MINAS GERAIS Campus Rio Pomba Mini Curso Linux Eu defendo!!! Apresentação Rafael Arlindo Dias Técnico em Informática CEFET Rio Pomba/MG Cursos

Leia mais

ROM-BIOS Inicialização Sistemas de Arquivos Formatação

ROM-BIOS Inicialização Sistemas de Arquivos Formatação ROM-BIOS Inicialização Sistemas de Arquivos Formatação 1 ROM-BIOS ROM-BIOS Basic Input/Output System (Sistema Básico de Entrada/Saída). O termo é incorretamente conhecido como: Basic Integrated Operating

Leia mais

Programação Avançada em Linux

Programação Avançada em Linux Programação Avançada em Linux Gleicon da Silveira Moraes Novatec Editora Capítulo 1 Características do Linux Neste capítulo são descritos detalhes e características do sistema operacional GNU/Linux importantes

Leia mais

SISTEMAS OPERACIONAIS DE ARQUITETURA ABERTA

SISTEMAS OPERACIONAIS DE ARQUITETURA ABERTA SISTEMAS OPERACIONAIS DE ARQUITETURA ABERTA Prof. Ulisses Cotta Cavalca Belo Horizonte/MG 2015 1 SUMÁRIO 1. Histórico do sistema operacional 2. Licença de softwares 3. Aspectos

Leia mais

SOFTWARE LIVRE. Distribuições Live CD. Kernel. Distribuição Linux

SOFTWARE LIVRE. Distribuições Live CD. Kernel. Distribuição Linux SOFTWARE LIVRE A liberdade de executar o programa, para qualquer propósito. A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades. Acesso ao código-fonte é um pré-requisito

Leia mais

Objetivos do Curso. Organização do Curso. Apresentação do Curso. Pós Graduação em Projeto e Gerencia de Redes de Computadores

Objetivos do Curso. Organização do Curso. Apresentação do Curso. Pós Graduação em Projeto e Gerencia de Redes de Computadores 1 Pós Graduação em Projeto e Gerencia de Redes de Computadores Sistemas Operacionais de Redes I - Linux Prof.: Nelson Monnerat Apresentação do Curso 1 Objetivos do Curso Sistema Operacional Unix/Linux;

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

Curso de Linux Básico com o Linux Educacional

Curso de Linux Básico com o Linux Educacional Curso de Linux Básico com o Felipe Buarque de Queiroz felipe.buarque@gmail.com Unidade Gestora de Tecnologia da Informação - UGTI Fundação de Amparo a Pesquisa do Estado de Alagoas - FAPEAL Maio de 2009

Leia mais

Índice de tabelas. Índice de ilustrações

Índice de tabelas. Índice de ilustrações Bod Garage Todos os direitos reservados Índice Introdução...2 Objetivo geral...8 Procedimentos...8 Referências...9 Índice de tabelas Tabela 1: Maio/2007...3 Tabela 2: Maio/2008...3 Tabela 3: Maio/2009...3

Leia mais

Linux Embedded. Criação de uma instalação. Especificação, Modelação e Projecto de Sistemas Embutidos

Linux Embedded. Criação de uma instalação. Especificação, Modelação e Projecto de Sistemas Embutidos Especificação, Modelação e Projecto de Sistemas Embutidos Criação de uma instalação Linux Embedded Sérgio Julião N. Mec.: 29976 Sérgio Soldado N. Mec.: 31397 Podem ser classificados através de: Sistemas

Leia mais

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção Sistemas de Arquivos Funções de um SO Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção 2 Sistemas Operacionais Necessidade de Armazenamento Grandes quantidades

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador Sistemas de Informação Prof. Anderson D. Moura Um programa de computador é composto por uma seqüência de instruções, que é interpretada e executada por um processador ou por uma máquina virtual. Em um

Leia mais

Sistemas Operacionais de Arquitetura Aberta

Sistemas Operacionais de Arquitetura Aberta Sistemas Operacionais de Arquitetura Aberta Dailson Fernandes www.dailson.com.br contato@dailson.com.br Facebook: dailson.fernandes Twitter: @dailson_ Habilidades Instalar o sistema operacional; Instalar

Leia mais

Aula 05 Estrutura de diretórios

Aula 05 Estrutura de diretórios 1 Aula 05 Estrutura de diretórios 1.0 Histórico Quando do desenvolvimento do Linux, Linus Torvalds tinha a pretensão de evitar problemas encontrados durante seu uso do Minix. Dessa maneira, o sistema de

Leia mais

Revisão LPI101. Tópicos e Objetivos. - 1.102 Instalação e Gerenciamento de Pacotes do Linux. - 1.104 Dispositivos, Sistemas de Arquivos Linux e o FHS

Revisão LPI101. Tópicos e Objetivos. - 1.102 Instalação e Gerenciamento de Pacotes do Linux. - 1.104 Dispositivos, Sistemas de Arquivos Linux e o FHS Tópicos e Objetivos - 1.101 Hardware e Arquitetura - - 1.103 Comandos GNU e Unix - 1.104 Dispositivos, Sistemas de Arquivos Linux e o FHS - 1.1.10 Sistema Xwindow 65 Questões em 90 minutos = 1m24s por

Leia mais

FACULDADE DE TECNOLOGIA SENAC GOIÁS Gestão da Tecnologia da Informação. Daniel Augusto, Rodrigo Damasceno, Andrey Castro LINUX CENTOS

FACULDADE DE TECNOLOGIA SENAC GOIÁS Gestão da Tecnologia da Informação. Daniel Augusto, Rodrigo Damasceno, Andrey Castro LINUX CENTOS FACULDADE DE TECNOLOGIA SENAC GOIÁS Gestão da Tecnologia da Informação Daniel Augusto, Rodrigo Damasceno, Andrey Castro LINUX CENTOS Lucília Gomes Ribeiro GOIÂNIA, 2015 Daniel Augusto, Rodrigo Damasceno,

Leia mais

Gerenciamento de Boot

Gerenciamento de Boot - Gerenciamento de Boot é um meio de você configurar e trabalhar com diversos sistemas operacionais instalados. - Gerenciador de Boot é um pequeno software instalado no Master Boot Record (MBR) nas trilhas

Leia mais

Instalação de ambiente de desenvolvimento para a série NXP LPC111x

Instalação de ambiente de desenvolvimento para a série NXP LPC111x UNIFEI Universidade Federal de Itajubá IESTI - Instituto de Engenharia de Sistemas e Tecnologia da Informação ELT031 Aprendizado Baseado em Projeto I Instalação de ambiente de desenvolvimento para a série

Leia mais

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br 2007. Roteiro. Componentes do Sistema

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br 2007. Roteiro. Componentes do Sistema Sistemas Operacionais I Parte III Estrutura dos SOs Prof. Gregorio Perez gregorio@uninove.br 2007 Roteiro Serviços Estrutura dos Sistemas Operacionais Funções do Sistema Operacional Chamadas do Sistema

Leia mais

Fundamentos e Prática em Informática Ensino Médio Integrado em Informática. Lara Popov Zambiasi Bazzi Oberderfer

Fundamentos e Prática em Informática Ensino Médio Integrado em Informática. Lara Popov Zambiasi Bazzi Oberderfer Fundamentos e Prática em Informática Ensino Médio Integrado em Informática Lara Popov Zambiasi Bazzi Oberderfer Interface amigável e de fácil instalação; Maior compatibilidade de programas

Leia mais

Noções de Software. André Aziz (andreaziz.ufrpe@gmail.com) Francielle Santos (francielle.ufrpe@gmail.com)

Noções de Software. André Aziz (andreaziz.ufrpe@gmail.com) Francielle Santos (francielle.ufrpe@gmail.com) Noções de Software André Aziz (andreaziz.ufrpe@gmail.com) Francielle Santos (francielle.ufrpe@gmail.com) Noções de Software; Sistemas Operacionais: Evolução; Conceitos Básicos; Tipos; Exemplos. DEINFO/UFRPE

Leia mais

Gerência de Redes de Computadores. 05 Gerência de Hospedeiros (Hosts)

Gerência de Redes de Computadores. 05 Gerência de Hospedeiros (Hosts) Gerência de Redes de Computadores 05 Gerência de Hospedeiros (Hosts) UFCG / DSC / JPS * 05 GERÊNCIA DE HOSPEDEIROS 1 TIPOS DE HOSPEDEIROS DOIS TIPOS DE HOSPEDEIROS o Servidores o Estações Clientes HÁ GRANDE

Leia mais

Roteiro. Sistemas Distribuídos. Sistemas de Arquivos Distribuídos. Sistema de arquivos distribuídos

Roteiro. Sistemas Distribuídos. Sistemas de Arquivos Distribuídos. Sistema de arquivos distribuídos Sistemas Distribuídos Sistemas de Arquivos Distribuídos Roteiro Sistema de arquivos distribuídos Requisitos Arquivos e diretórios Compartilhamento Cache Replicação Estudo de caso: NFS e AFS Sistemas Distribuídos

Leia mais

INSS. Prof. Rafael Araújo. Informática. software assim licenciado. A esta versão de copyright, dá-se o nome de copyleft.

INSS. Prof. Rafael Araújo. Informática. software assim licenciado. A esta versão de copyright, dá-se o nome de copyleft. SOFTWARE LIVRE Software Livre é todo programa de computador que pode ser usado, copiado, estudado, modificado e redistribuído sem nenhuma restrição. O software livre tem seu modelo de desenvolvimento baseado

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

Leia mais

Módulos...2 Shell...3

Módulos...2 Shell...3 Cesar Kállas cesarkallas@gmx.net Curso GNU/Linux Realização CAECOMP Puc Campinas 2004 Capítulo 2 O Kernel...2 Módulos...2 Shell...3 Scripts...3 Bourne Shell sh...3 Bourne-Again Shell bash...3 Korn Shell

Leia mais

UNIX & Linux. Histórico, distribuição licença, características. Taisy Weber

UNIX & Linux. Histórico, distribuição licença, características. Taisy Weber UNIX & Linux Histórico, distribuição licença, características Taisy Weber História de UNIX 1969 - Ken Thompson Bell Laboratories, PDP-7 Dennis Ritchie logo juntou-se a Thompson Ritchie havia trabalhado

Leia mais

Tecnólogo em Análise e Desenvolvimento de Sistemas

Tecnólogo em Análise e Desenvolvimento de Sistemas Tecnólogo em Análise e Desenvolvimento de Sistemas O conteúdo deste documento tem como objetivos geral introduzir conceitos mínimos sobre sistemas operacionais e máquinas virtuais para posteriormente utilizar

Leia mais

Desenvolvimento de uma Aplicação de Controle de Créditos Usando a Tecnologia MIFARE

Desenvolvimento de uma Aplicação de Controle de Créditos Usando a Tecnologia MIFARE Desenvolvimento de uma Aplicação de Controle de Créditos Usando a Tecnologia MIFARE Julho 2008 Davi, Marcelo, Murilo, Pablo, Rodrigo Resumo MIFARE é uma tecnologia de smart cards sem contato, especificada

Leia mais

Windows NT 4.0. Centro de Computação

Windows NT 4.0. Centro de Computação Windows NT 4.0 Centro de Computação Tópicos Introdução Instalação Configuração Organização da rede Administração Usuários Servidores Domínios Segurança Tópicos È O sistema operacional Windows NT È Características:

Leia mais

William Stallings Arquitetura e Organização de Computadores 8 a Edição

William Stallings Arquitetura e Organização de Computadores 8 a Edição William Stallings Arquitetura e Organização de Computadores 8 a Edição Capítulo 7 Entrada/saída Os textos nestas caixas foram adicionados pelo Prof. Joubert slide 1 Problemas de entrada/saída Grande variedade

Leia mais

Mini curso de GNU/Linux

Mini curso de GNU/Linux Rudson Ribeiro Alves Mestre em Física (Semi Condutores) Usuário Unix de 1991 1998 Usuário Slackware deste 1994 Professor da UVV deste 1998 Mini curso de GNU/Linux Noções básicas sobre GNU/Linux Plataforma

Leia mais

Organização do Curso. Instalação e Configuração. Módulo II. Pós Graduação em Projeto e Gerencia de Redes de Computadores

Organização do Curso. Instalação e Configuração. Módulo II. Pós Graduação em Projeto e Gerencia de Redes de Computadores 1 Pós Graduação em Projeto e Gerencia de Redes de Computadores Sistemas Operacionais de Redes I - Linux Prof.: Nelson Monnerat Instalação e Configuração 1 Sistemas Operacionais de Redes I - Linux Módulo

Leia mais

Estrutura de S.O. Roteiro. BC1518 - Sistemas Operacionais. Prof. Marcelo Z. do Nascimento. Aula 02 2 Quadrimestre. de 2010

Estrutura de S.O. Roteiro. BC1518 - Sistemas Operacionais. Prof. Marcelo Z. do Nascimento. Aula 02 2 Quadrimestre. de 2010 BC1518 - Sistemas Operacionais Estrutura de S.O. Aula 02 2 Quadrimestre de 2010 Prof. Marcelo Z. do Nascimento Email: marcelo.nascimento@ufabc.edu.br Roteiro Serviço do sistema operacional Interface Chamadas

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Hardware Sistema de Entrada/Saída Visão Geral Princípios de Hardware Dispositivos de E/S Estrutura Típica do Barramento de um PC Interrupções

Leia mais

Infraestrutura de Hardware. Memória Virtual

Infraestrutura de Hardware. Memória Virtual Infraestrutura de Hardware Memória Virtual Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e executado pelo HW? Qual é a interface

Leia mais

Recuperando o GRUB após instalação do Windows

Recuperando o GRUB após instalação do Windows Recuperando o GRUB após instalação do Windows PET Engenharia de Computação - http://www.inf.ufes.br/~pet 1 Instruções iniciais Para efetuar as configurações a seguir talvez precisaremos executar comandos

Leia mais

Gerenciamento de ES e Sistema de Arquivos do Windows 2000

Gerenciamento de ES e Sistema de Arquivos do Windows 2000 1 Gerenciamento de ES e Sistema de Arquivos do Windows 2000 Gerenciador de E/S Objetivo é fornecer uma estrutura de modo eficiente para lidar com a grande variedade de dispositivos Bastante relacionado

Leia mais

TempOS: faça seu próprio sistema operacional à mão, e do zero!

TempOS: faça seu próprio sistema operacional à mão, e do zero! TempOS: faça seu próprio sistema operacional à mão, e do zero! Renê de Souza Pinto Instituto de Ciências Matemáticas e de Computação - ICMC Universidade de São Paulo - USP - São Carlos Abril / 2013 Renê

Leia mais

Curso Técnico de Nível Médio

Curso Técnico de Nível Médio Curso Técnico de Nível Médio Disciplina: Informática Básica 3. Software Prof. Ronaldo Software Formado por um conjunto de instruções (algoritmos) e suas representações para o

Leia mais

O novo xerife da inicialização

O novo xerife da inicialização O novo xerife da inicialização ANÁLISE Boot com UEFI ANÁLISE O novo xerife da inicialização A especificação do boot UEFI oferece novas capacidades e novas dores de cabeça também se o usuário não estiver

Leia mais

3.3. Espelhamento (RAID1)

3.3. Espelhamento (RAID1) 3.3. Espelhamento (RAID1) Neste servidor estamos usando dois HDs idênticos, cada um com 160GB de espaço em disco. Nos passos seguintes é importante existir dois HDs idênticos em tamanho. Caso ocorra a

Leia mais

.:: SLAX E SEUS SEGREDOS ::.

.:: SLAX E SEUS SEGREDOS ::. Por Hudson Gonçalves Manieri Figueredo (KyNDeR) 1 SUMÁRIO 1 - INTRODUÇÃO 1.1 - Como Funciona o LiveCD? 2 - A INICIALIZAÇÃO(BOOT) 2.1 - Habilitando a característica de configuração web do SLAX. 2.1.1 -

Leia mais

Objetivos Instalação Gerência de Pacotes UNIX Shell. Curso UNIX. Matheus Braun Magrin Felipe dos Santos Silveira

Objetivos Instalação Gerência de Pacotes UNIX Shell. Curso UNIX. Matheus Braun Magrin Felipe dos Santos Silveira Curso UNIX Matheus Braun Magrin Felipe dos Santos Silveira Universidade Federal de Santa Catarina 25 de Setembro de 2010 CHAMADA Objetivos Instalação do sistema Ubuntu 10.04 Conhecer a origem do sistema

Leia mais

ESTUDO DE CASO WINDOWS VISTA

ESTUDO DE CASO WINDOWS VISTA ESTUDO DE CASO WINDOWS VISTA História Os sistemas operacionais da Microsoft para PCs desktop e portáteis e para servidores podem ser divididos em 3 famílias: MS-DOS Windows baseado em MS-DOS Windows baseado

Leia mais

Sistema de Arquivos do Windows

Sistema de Arquivos do Windows Registro mestre de inicialização (MBR) A trilha zero do HD, onde ficam guardadas as informações sobre o(s) sistema(s) operacionais instalados. Onde começa o processo de inicialização do Sistema Operacional.

Leia mais

Linux. Wagner de Oliveira

Linux. Wagner de Oliveira Linux Wagner de Oliveira Um computador, uma mesa, um usuário. Duas pessoas não podem trabalhar em paralelo, executando o Microsoft Word na mesma máquina, simultaneamente. Windows 2003 Advanced Server +

Leia mais

Treinamento para Manutenção dos Telecentros

Treinamento para Manutenção dos Telecentros Treinamento para Manutenção dos Telecentros Módulo II :: Utilizando o Linux Básico do Sistema Manoel Campos da Silva Filho Professor do IFTO/Palmas 1 2 Código Aberto/Open Source Programas (softwares/aplicativos)

Leia mais