FreeBSD w systemach wbudowanych. Rafał Jaworowski raj@semihalf.com, raj@freebsd.org



Podobne dokumenty
Tworzenie sterowników dla FreeBSD. Michał Hajduk

FreeBSD/PowerPC dla systemów embedded. FreeBSD/PowerPC dla systemów embedded

FreeBSD do zabudowy. Czyli nie tylko pecety. Rafał Jaworowski meetbsd 2007, Warszawa

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Przegląd współczesnych systemów operacyjnych

Projekt TrustedBSD jako klucz do bezpieczeństwa systemu FreeBSD

Komputery przemysłowe i systemy wbudowane

Łagodne wprowadzenie do systemów wbudowanych. Bartłomiej Sięka

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

BSD alternatywa dla Linuksa. (na przykładzie FreeBSD)

Q E M U.

Przegląd dostępnych hypervisorów. Jakub Wojtasz IT Solutions Architect

1.Wstęp. 2.Generowanie systemu w EDK

Organizacja i struktura projektu FreeBSD. Wojciech A. Koszek wkoszek@freebsd.org Częstochowa,

Oprogramowanie Alternatywne

Łagodne wprowadzenie do systemów wbudowanych. Bartłomiej Sięka

ochrona w systemie operacyjnym

Historia modeli programowania

Krótka Historia Systemów Operacyjnych. Tomasz Borzyszkowski

Podstawowe zagadnienia

Konfiguracja i kompilacja jądra Linux. Based on Free Electrons

Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

Wprowadzenie do systemów operacyjnych

Warstwy systemu Windows 2000

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

WYKŁAD 3 Jądro systemu i procesy. Marcin Tomana Wyższa Szkoła Informatyki i Zarządzania

Struktury systemów operacyjnych

Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

Netgraph w systemie FreeBSD. Wojciech A. Koszek MeetBSD 2005 Kraków

QEMU działa na procesorach procesorach: emuluje procesory: dostępne dla s.o. hosta:

Elementy składowe systemu komputerowego

Wykład 6. Mikrokontrolery z rdzeniem ARM

Programowanie niskopoziomowe

Embedded Solutions Automaticon Efektywne pomiary i sterowanie przy użyciu systemu wbudowanego MicroDAQ

Podstawy programowania. Wprowadzenie

Proces uruchamiania FreeBSD przez bootloader U-Boot. Rafał Czubak

Opis efektów kształcenia dla modułu zajęć

EMBEDDED LINUX ON ARM9 CORE EMBEDDED LINUX NA PROCESORACH Z RODZINY ARM9

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

K. Konopko; Toolchain. Toolchain. dr inż. Krzysztof Konopko

Szkolenia specjalistyczne

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa Wstęp... 11

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Inżynieria Wytwarzania Systemów Wbudowanych

Powłoki systemu operacyjnego i intepretery

Wirtualizacja. Piotr Sikora Tomasz Ziółkowski

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Linux -- u mnie działa!

K. Konopko; Toolchain. Jądro Linuksa. dr inż. Krzysztof Konopko

Systemy wbudowane. Paweł Pełczyński

Praktyka Programowania

Bibliografia: pl.wikipedia.org Historia i rodzaje procesorów w firmy Intel

Wykład 3: Implementacja programów wbudowanych

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Systemy operacyjne system przerwań

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Przykładowa konfiguracja systemu komputerowego

Programowanie mikrokontrolerów AVR

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Wykład 1

Dystrybucje Linuksa c.d.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Architektura komputerów

Programowanie MorphX Ax

Zagadnienia programowania obiektowego

Programowanie w asemblerze Linkowanie

Czujniki obiektowe Sterowniki przemysłowe

Systemy Operacyjne 2006/07. Prezentacja o BSD na przykładzie FreeBSD. Maria Donten, Bartłomiej Etenkowski, Aleksander Zabłocki

Systemy czasu rzeczywistego wstęp

Linux vs rootkits. - Adam 'pi3' Zabrocki

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Elastyczna sieć dla rozwiązań Cloud Open vswitch

Systemy operacyjne oparte na mikrojądrze na przykładzie Minix3. Maciej Łaszcz, Wojciech Łowiec, Patryk Spanily 2 XII 2008

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Android - wprowadzenie. Łukasz Przywarty

INŻYNIERIA OPROGRAMOWANIA

Programowanie obiektowe zastosowanie języka Java SE

Wprowadzenie do systemu Minix

Wykład 2. Przegląd mikrokontrolerów 8-bit: -AVR -PIC

2 Tworzenie oprogramowania dla systemu wbudowanego

Formalna weryfikacja oprogramowania w lotnictwie

Warsztaty szkoleniowe. Technologia SafetyLon w systemach związanych z bezpieczeństwem funkcjonalnym Narzędzia SafetyLon Moduł 4.5.

System komputerowy. System komputerowy

Projekt i implementacja filtra dzeń Pocket PC

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

Jądro systemu operacyjnego

Zastosowanie emulatorów w rozbudowie systemów wbudowanych

Programowanie współbieżne i rozproszone

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Systemy operacyjne III

Podstawy programowania

SYSTEMY OPERACYJNE WYKŁAD 1 INTEGRACJA ZE SPRZĘTEM

Systemy czasu rzeczywistego wstęp

Programowanie w C. dr inż. Stanisław Wszelak

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Transkrypt:

Rafał Jaworowski raj@semihalf.com, raj@freebsd.org AGH, Kraków 26.03.2009

Szkic prezentacji Wstęp, defnicje Podstawy FreeBSD, historia Istotne cechy dla zastosowań wbudowanych Przegląd interfejsów jądra, model sterowników urządzeń we/wy Podsumowanie, przykłady użycia Nasze prace nad FreeBSD

Wstęp Defnicje Środowisko operacyjne (operating environment) FreeBSD System wbudowany (embedded) System-on-chip (SOC) Notacja intro(4)

FreeBSD Nowoczesny system operacyjny UNIX Berkeley Software Distribution Wsparcie dla różnorodnych platform i architektur http://www.freebsd.org AMD64, ARM, i386, MIPS, PC98, PowerPC, SPARC64 Jak dużo BSD w FreeBSD?

Ultra krótka historia UNIXa i FreeBSD Prehistoria Multics (1965) Początki Bell Telephone Labs (1969) Ken Thompson, Dennis Ritchie, PDP-7, PDP-11 AT&T, Berkeley (University of California) Berkeley Software Distribution (1977), System V (1974) 4.3BSD, 4.4BSD (1992) FreeBSD (1993)

FreeBSD i architektury wbudowane ARM v4, v5 AVR32 (w trakcie) i386 MIPS PowerPC Book-E

Istotne cechy FreeBSD to kompletne środowisko Zestaw narzędzi do tworzenia kodu w podstawowym systemie (kompilator, asembler, linker, debugger) Bootloader (UWAGA: to nie frmware!) Jądro (kernel) Świat (user land), podstawowe programy i narzędzia Build system Budowanie skrośne Build your own world

Istotne cechy c.d. POSIX / UNIX Standardy interfejsów programowania Biblioteki Dodatkowe aplikacje (ports) ~17 000 pozycji Pełne źródła

Bootloader loader(8) Uruchomienie jądra Dynamiczne moduły jądra Środowisko (tunables, kenv, FORTH) Jednolity interfejs programistyczny wejścia do jądra (metadata) Jednolity interfejs użytkownika (command line UI) Strukturalna konstrukcja Warstwy zależna i niezależna od platformy, libstand(3)

Kernel FreeBSD podstawy Konstrukcja monolityczna (tradycyjna) Opakowanie ELF Prawie zwyczajne binarium Modularyzacja Partycjonowanie podsystemów kernela, hierarchia Moduły statyczne vs. dynamiczne Mechanizmy SYSINIT(), DECLARE_MODULE() UWAGA: modularyzacja!= mikrokernel

Kernel FreeBSD opakowanie $ file /boot/kernel/kernel /boot/kernel/kernel: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (FreeBSD), dynamically linked (uses shared libs), not stripped $ readelf -l /boot/kernel/kernel Elf file type is EXEC (Executable file) Entry point 0x11d410 There are 4 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align PHDR 0x000034 0x00100034 0x00100034 0x00080 0x00080 R E 0x4 INTERP 0x0000f4 0x001000f4 0x001000f4 0x0000d 0x0000d R 0x1 [Requesting program interpreter: /red/herring] LOAD 0x000000 0x00100000 0x00100000 0x167e50 0x184f80 RWE 0x10000 DYNAMIC 0x167784 0x00267784 0x00267784 0x00068 0x00068 RW 0x4 $ readelf -d /boot/kernel/kernel Dynamic segment at offset 0x167784 contains 8 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [hack.so] 0x00000004 (HASH) 0x100104 0x00000005 (STRTAB) 0x112098 0x00000006 (SYMTAB) 0x105438 0x0000000a (STRSZ) 45944 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000015 (DEBUG) 0x0 0x00000000 (NULL) 0x0

Kernel FreeBSD c.d. Warstwy Zależna od platformy / architektury (machine dependent) Abstrakcyjna, niezależna od sprzętu Elementy podejścia obiektowego Mechanizm KOBJ Wirtualizacja, polimorfzm interfejsów wewnątrzkernelowych (przykłady: VM, przerwania PowerPC, model sterowników urządzeń I/O)

KOBJ przykład wirtualizacji int powerpc_enable_intr(void) {......... for (vector = 0; vector < nvectors; vector++) { i = powerpc_intrs[vector]; if (i == NULL) continue; if (i->trig!= INTR_TRIGGER_CONFORM i->pol!= INTR_POLARITY_CONFORM) PIC_CONFIG(pic, i->irq, i->trig, i->pol); if (i->event!= NULL) PIC_ENABLE(pic, i->irq, vector); } return (0); static device_method_t openpic_ocpbus_methods[] = { /* Device interface */ DEVMETHOD(device_probe, openpic_ocpbus_probe), DEVMETHOD(device_attach, openpic_attach), } /* PIC interface */ DEVMETHOD(pic_config, DEVMETHOD(pic_dispatch, DEVMETHOD(pic_enable, DEVMETHOD(pic_eoi, DEVMETHOD(pic_ipi, DEVMETHOD(pic_mask, DEVMETHOD(pic_unmask, static device_method_t hrowpic_methods[] = { /* Device interface */ DEVMETHOD(device_probe, hrowpic_probe), DEVMETHOD(device_attach, hrowpic_attach), /* PIC interface */ DEVMETHOD(pic_dispatch, DEVMETHOD(pic_enable, DEVMETHOD(pic_eoi, DEVMETHOD(pic_ipi, DEVMETHOD(pic_mask, DEVMETHOD(pic_unmask, { 0, 0 }, }; hrowpic_dispatch), hrowpic_enable), hrowpic_eoi), hrowpic_ipi), hrowpic_mask), hrowpic_unmask), openpic_config), openpic_dispatch), openpic_enable), openpic_eoi), openpic_ipi), openpic_mask), openpic_unmask), { 0, 0 }, }; static driver_t openpic_ocpbus_driver = { "openpic", openpic_ocpbus_methods, sizeof(struct openpic_softc) };

Świat (user land) Środowisko pracy ponad jądrem Biblioteki, aplikacje (linker dynamiczny, shell) Narzędzia diagnostyczne (pciconf, usbconfg, i2c) Root flesystem Przeważnie niezależne od architektury Standardowa biblioteka C (libc) Operacje zmiennoprzecinkowe (systemy wbudowane często nie mają FPU), emulacja (SoftFloat, FPU_EMU) Wołania systemowe (syscall)

Wybrane interfejsy jądra bus_space(9) Abstrakcja dostępu do magistrali lokalnej CPU Porządek bajtów (endianness), szerokość słów, przestrzeń adresowa bus_dma(9) Abstrakacja operacji Direct Memory Access Synchronizacja (cache, DMA bez wsparcia dla koherencji) rman(9) Warstwa zarządzania abstrakcyjnymi zasobami

Model sterowników urządzeń newbus Hierarchia (magistrale, urządzenia końcowe) Zorientowany obiektowo (KOBJ), łatwy w użyciu Deklaracja klasy Implementacja metod dla magistrali macierzystej (probe+attach) Reszta dzieje się automatycznie Właściwy sterownik niezależny od architektury Abstrakcyjne interfejsy bus_space, bus_dma

Newbus hierarchia root nexus RMAN I/O MEM ocp lbc i2c... uart tsec pci opic RMAN IRQ...

Sterownik fragment implementacji static device_method_t tsec_methods[] = { /* Device interface */ DEVMETHOD(device_probe, tsec_ocp_probe), DEVMETHOD(device_attach, tsec_ocp_attach), DEVMETHOD(device_detach, tsec_ocp_detach), DEVMETHOD(device_shutdown, DEVMETHOD(device_suspend, DEVMETHOD(device_resume, tsec_shutdown), tsec_suspend), tsec_resume), /* Bus interface */ DEVMETHOD(bus_print_child, DEVMETHOD(bus_driver_added, bus_generic_print_child), bus_generic_driver_added), /* MII interface */ DEVMETHOD(miibus_readreg, DEVMETHOD(miibus_writereg, DEVMETHOD(miibus_statchg, { 0, 0 } tsec_miibus_readreg), tsec_miibus_writereg), tsec_miibus_statchg), }; static driver_t tsec_ocp_driver = { "tsec", tsec_methods, sizeof(struct tsec_softc), }; DRIVER_MODULE(tsec, ocpbus, tsec_ocp_driver, tsec_devclass, 0, 0); MODULE_DEPEND(tsec, ocpbus, 1, 1, 1); MODULE_DEPEND(tsec, ether, 1, 1, 1);...... sc = device_get_softc(dev); sc->sc_rrid = 0; sc->sc_rres = bus_alloc_resource(dev, SYS_RES_MEMORY, &sc->sc_rrid, 0ul, ~0ul, TSEC_IO_SIZE, RF_ACTIVE); if (sc->sc_rres == NULL) return (ENXIO); sc->sc_bas.bsh = rman_get_bushandle(sc->sc_rres); sc->sc_bas.bst = rman_get_bustag(sc->sc_rres);

Cechy wyróżniające FreeBSD Licencja, przyjazna dla zastosowań komercyjnych Akademickie korzenie Wielu zasłużonych hackerów z czasów starych UNIXów BSD pracuje nad FreeBSD (Kirk McKusick, Sam Leffer) Tradycje UNIXa Własny styl kodowania, dokumentacji, pracy nad projektem style(9)

Cechy wyróżniające FreeBSD c.d. Integracja (leitmotiv kompletnego systemu) Stabilność i bezpieczeństwo Wydajność Skalowalne SMP Znakomite wsparcie dla sieci Wzorcowy stos TCP/IP MP-safety, wirtualizacja (VIMAGE), SCTP WiFi

Cechy wyróżniające FreeBSD c.d. System portów (aplikacji) Popularność i naśladownictwo (Gentoo portage wzorowane na ports z FreeBSD) Aktualna i wyczerpująca dokumentacja System manual pages Podręcznik http://www.freebsd.org/doc/en_us.iso8859-1/books/handbook/index.html Warstwy binarnej zgodności Linuxulator, NDISulator

Przykłady użycia FreeBSD Apple Apache Ironport (Cisco) Home.pl Isilon Netcraft Juniper Networks Sony Japan NetApp Weathernews Yahoo!

Nasze prace PowerPC MPC85xx (Freescale) PowerQUICC III, procesor telekomunikacyjny Single-core, multi-core (SMP) Book-E PowerPC PPC4xx (AMCC, IBM) Single-core Book-E PowerPC MPC5xxx (Freescale)

Nasze prace c.d. ARM Marvell 88F5xxx (Orion) Marvell 88F6xxx (Kirkwood) Marvell MV-78xxx (Discovery Innovation) Większość kodu już dostępna w publicznym repozytorium projektu FreeBSD Wkrótce nowe platformy!

Podsumowanie systemu FreeBSD Polecamy do zastosowań wbudowanych Przykłady komercyjnych udanych wdrożeń Zachęcamy do użycia w środowiskach akademickich Walory edukacyjne Świetny kod jako materiał do nauki programowania (dobre wzorce)

Kilka słów o projekcie FreeBSD Organizacja Zespół osób zaangażowanych w rozwój systemu (ports, src) Osoba uprzywilejowana (prawo pisania w repozytorium): commiter Grupa core, wybierana spośród developerów: rozwiązywanie sporów, koordynacja, zarządzanie przywilejem pisania (commit bit) Obecnie ~200 aktywnych developerów, tysiące wspierających użytkowników

Więcej o projekcie FreeBSD Przyjacielska atmosfera Obyczaje i kultura Pointy hat Wielu znakomitych hackerów UNIXowych Nacisk na jak najwyższy poziom techniczny Wzajemny przegląd kodu (peer reviews) Serdecznie zapraszamy...

Dziękuję za uwagę! Pytania, komentarze?

Rafał Jaworowski raj@semihalf.com, raj@freebsd.org AGH, Kraków 26.03.2009