5. Controle de versão descentralizado
• Linus tem seu repositório:
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git Linus
• Recebe um e-mail do mantenedor do
um subsistema
“Linus, please pull from: ssh://master.kernel.org/pub/scm/linux/
A B C
kernel/git/mchehab/linux-2.6.git v4l_for_2.6.35”
• Ele [Linus] faz o merge no seu
repositório no momento que achar
adequado.
Monday, June 28, 2010
6. Módulos no kernel
Módulos de sistemas
vfat - suporte ao filesystem FAT32
usbnet - subsistema de rede com USB
Módulos de dispositivo
asix - controlador do conversor USB/Ethernet
nvidia - placa de vídeo
Podem existir módulos proprietários, mas algumas interfaces são
exclusivas para licenças livres
Monday, June 28, 2010
7. #include <stdio.h>
static int start(void) {
printf(“Hello from userspace!”);
return 0;
}
int main(void) {
return start();
}
Monday, June 28, 2010
8. #include <stdio.h>
static int start(void) {
printf(“Hello from userspace!”);
return 0;
}
int main(void) {
return start();
}
Monday, June 28, 2010
9. #include <stdio.h>
static int start(void) {
printf(“Hello from userspace!”);
return 0;
} gcc -Wall main.c -o main
int main(void) {
return start();
}
Monday, June 28, 2010
21. Sincronismo
#include <linux/spinlock .h>
spinlock t mylock = SPIN_LOCK_ULOCKED;
spin_lock(&mylock );
• Spinlocks
/∗ região crítica ∗/
spin_unlock(&mylock );
• Mutexes
• Operações atômicas
Monday, June 28, 2010
22. Sincronismo
#include <linux/spinlock .h>
spinlock t mylock = SPIN_LOCK_ULOCKED;
spin_lock(&mylock );
• Spinlocks
/∗ região crítica ∗/
spin_unlock(&mylock );
• Mutexes
• Operações atômicas
Monday, June 28, 2010
23. Sincronismo
#include <linux/spinlock .h>
spinlock t mylock = SPIN_LOCK_ULOCKED;
spin_lock(&mylock );
• Spinlocks
/∗ região crítica ∗/
spin_unlock(&mylock );
• Mutexes
• Operações atômicas
#include <linux/mutex .h>
static DEFINE_MUTEX(mymutex);
mutex_lock(&mymutex);
/∗ região crítica ∗/
mutex_unlock(&mymutex);
Monday, June 28, 2010
24. Facilitadores
• Udev - para gerenciamento de nós /dev
• Sysfs - exportar informações para os processos do usuário.
• Kobjects e Krefs - contador de referências
Monday, June 28, 2010
28. kobject krefs
Contador de referências, para o kernel gerenciar o número de
objetos associados em uma mesma estrutura.
struct kobject { struct kref {
const char *name; atomic_t refcount;
struct list_head entry; }
struct kobject *parent;
struct kset *kset;
struct kobj_type *ktype;
struct sysfs_dirent *sd;
struct kref kref;
}
Monday, June 28, 2010
29. Modelo de Driver do Linux
O modelo propôs uma representação genérica de objetos:
• Devices
• Devices drivers
• Bus drivers
• Devices Classes
• Devices Interfaces
Monday, June 28, 2010
30. Modelo de Driver do Linux
O modelo propôs uma representação genérica de objetos:
• Devices
• Devices drivers
• Bus drivers
• Devices Classes
• Devices Interfaces
Funções para operar e controlar cada tipo de objeto.
Monday, June 28, 2010
31. Modelo de Driver do Linux
O modelo propôs uma representação genérica de objetos:
• Devices
• Devices drivers
• Bus drivers
• Devices Classes
• Devices Interfaces
Funções para operar e controlar cada tipo de objeto.
Monday, June 28, 2010
32. Modelo de Driver do Linux
O modelo propôs uma representação genérica de objetos:
• Devices Um device driver implementa uma ou
mais interfaces (devices interfaces) de
• Devices drivers
uma classe de dispositivos (devices
• Bus drivers classes) para um grupo de dipositivos
• Devices Classes (devices) em um barramento (bus driver)
específico.
• Devices Interfaces
Funções para operar e controlar cada tipo de objeto.
Monday, June 28, 2010
33. USB/Ethernet
Ethernet USB
Controlador
asix.ko
Monday, June 28, 2010
34. USB/Ethernet
Preenchimento de estruturas:
Monday, June 28, 2010
35. USB/Ethernet
Preenchimento de estruturas:
Monday, June 28, 2010