Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução ao Desenvolvimento do Kernel Linux, Resumos de Competências em Linux

Este documento fornece uma introdução ao desenvolvimento do kernel linux, abordando assuntos como a obtenção do código-fonte, licença, definição, design, exemplos de implementação, versões e diretórios importantes. Além disso, é fornecida informação sobre o estilo de codificação, compilação, carregamento e listagem de módulos, além de ferramentas úteis para o desenvolvimento.

Tipologia: Resumos

2021

Compartilhado em 06/10/2021

usuário desconhecido
usuário desconhecido 🇧🇷

2 documentos

1 / 38

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdução ao Desenvolvimento
Introdução ao Desenvolvimento
do Kernel Linux
do Kernel Linux
Versões 2.6.X
Versões 2.6.X
http://www.tchelinux.org
http://www.tchelinux.org
Palestrante: Douglas Schilling Landgraf
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Pré-visualização parcial do texto

Baixe Introdução ao Desenvolvimento do Kernel Linux e outras Resumos em PDF para Competências em Linux, somente na Docsity!

Introdução ao Desenvolvimento

Introdução ao Desenvolvimento

do Kernel Linux

do Kernel Linux

Versões 2.6.X

Versões 2.6.X

http://www.tchelinux.org

http://www.tchelinux.org

Palestrante: Douglas Schilling Landgraf

Email: [email protected]

Sobre o palestrante

Sobre o palestrante

Sobre a palestra

Sobre a palestra

Dicas iniciais

Dicas iniciais

Kernel Linux

Onde obter o código fonte?

Onde obter o código fonte?

http

http ://www.kernel.org

://www.kernel.org

ftp

ftp ://ftp.kernel.org/pub

://ftp.kernel.org/pub

rsync

rsync ://rsync.kernel.org/pub/

://rsync.kernel.org/pub/

Kernel Linux

Licença:

Licença:

GPL ( versão 2 )

GPL ( versão 2 )

http://www.gnu.org/copyleft/gpl.html

http://www.gnu.org/copyleft/gpl.html

Como funciona?

Como funciona?

Podemos

Podemos

baixar

baixar

o software e

o software e

alterar

alterar

, desde que publiquemos este

, desde que publiquemos este

software com as

software com as licenças originais, incluindo

licenças originais, incluindo a disponibilização do

a disponibilização do

código fonte

código fonte

.

Kernel Linux

Kernel

Kernel

Aplicativo 1 Aplicativo 1 Aplicativo 2 Aplicativo 2 System Call Interface (open, close, brk (malloc), etc.) System Call Interface (open, close, brk (malloc), etc.) Kernel Subsystems Kernel Subsystems Device Drivers Device Drivers User-Space User-Space Kernel-Space Kernel-Space Hardware Hardware

Design: Monolítico versus MicroKernel

Design: Monolítico versus MicroKernel

● Monolítico: Monolítico: ● Criado em meados de 1980 Criado em meados de 1980 ● Um grande e único processo (imenso) Um grande e único processo (imenso) ● Comunicação trivial (todos rodam em um único processo) Comunicação trivial (todos rodam em um único processo) ● MicroKernel: MicroKernel: ● Separado em dois processos (“servers” / user space) Separado em dois processos (“servers” / user space) ● Comunicação via IPC (interprocess communication) Comunicação via IPC (interprocess communication) ● Modularidade Modularidade

Kernel

Kernel

Design:

Design:

Executa em um

Executa em um único processo

único processo

Kernel Linux é

Kernel Linux é monolítico

monolítico

Implementa

Implementa

recursos do microkernel

recursos do microkernel

design

design

Capacidade de

Capacidade de

carregar dinamicamente módulos

carregar dinamicamente módulos

Suporte a

Suporte a processadores SMP

processadores SMP (symmetrical multiprocessor)

(symmetrical multiprocessor)

Sistema de acesso ao dispositivos (

Sistema de acesso ao dispositivos (

sysfs

sysfs

)

Kernel Linux

Versões:

Versões:

Kernel Linux

Estáveis:

Estáveis:

Correções de bugs

Correções de bugs

Novos drivers

Novos drivers

Desenvolvimento:

Desenvolvimento:

Alterações frequentes e drásticas

Alterações frequentes e drásticas

Desenvolvedores testam novas soluções

Desenvolvedores testam novas soluções

Versões, e hoje como funciona?

Versões, e hoje como funciona?

Hoje

Hoje só temos

só temos a versão 2.6.X

a versão 2.6.X

Decisão tomada no Linux Kernel Developers Summit (

Decisão tomada no Linux Kernel Developers Summit ( 2004

Todas novas implementações são enviadas para o

Todas novas implementações são enviadas para o Andrew Morton

Andrew Morton

(Árvore mm)

(Árvore mm)

Após

Após tornar se estável

tornar se estável o patch entra na versão principal.

o patch entra na versão principal.

Versão 2.

Versão 2. ~=

Árvore

Árvore mm

mm

Kernel Linux

Diretórios:

Diretórios:

arch/

arch/ Código específico de arquitetura

Código específico de arquitetura

crypto/

crypto/

API de criptografia

API de criptografia

Documentation/

Documentation/ Documentação

Documentação

drivers/

drivers/ Device Drivers

Device Drivers

fs/

fs/

File systems

File systems

include/

include/

Headers

Headers

init/

init/ Kernel boot

Kernel boot

ipc/

ipc/ Interprocess communication

Interprocess communication

kernel/

kernel/

Core do Kernel

Core do Kernel

Kernel Linux

Kernel Linux

CodingStyle:

CodingStyle:

Identação

Identação

1 TAB = 8 caracteres (!= 8 espaços)

1 TAB = 8 caracteres (!= 8 espaços)

Colunas

Colunas 80

if

if (teste)

(teste) {

blah();

blah();

} else {

} else {

bleh();

bleh();

if(foo)

if(foo)

bar();

bar();

$ linux/Documentation/CodingStyle

$ linux/Documentation/CodingStyle

Kernel Linux

CodingStyle:

CodingStyle:

Funções:

Funções:

1, 2 páginas?

1, 2 páginas?

< 10 variáveis locais?

< 10 variáveis locais?

Comentários:

Comentários:

  • Olá, Eu sou um comentário!

  • Olá, Eu sou um comentário!

Outros:

Outros: typedef, structs, etc.

typedef, structs, etc.

Kernel Linux

Compilando/Carregando/Listando/Descarregando:

Compilando/Carregando/Listando/Descarregando:

$ linux/drivers/net>

$ linux/drivers/net> vi hello.c

vi hello.c

$ linux/drivers/net>

$ linux/drivers/net>

vi Makefile

vi Makefile

obj m += hello.o

obj m += hello.o

$ linux/drivers/net>

$ linux/drivers/net> make C /usr/src/linux SUBDIRS=$PWD modules

make C /usr/src/linux SUBDIRS=$PWD modules

Atenção aos WARNINGS

Atenção aos WARNINGS

insmod

insmod ./modulo.ko

./modulo.ko

lsmod

lsmod

modprobe

modprobe modulo.ko (procura por dependências)

modulo.ko (procura por dependências)

rmmod

rmmod modulo.ko

modulo.ko

Kernel Linux

hello.c

hello.c

#include <linux/init.h>

#include <linux/init.h>

#include <linux/module.h>

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

static int hello_init(void)

printk(KERN_ALERT "hello!\n");

printk(KERN_ALERT "hello!\n");

return 0;

return 0;