Kernel - kompilácia

Sekcia: Programovanie 03.01.2013 | 01:07
Bibibo   Návštevník
Neviem či som správne pochopil či je to ten kernel a čo obsahuje. Ak skompilujem zo zdrojáku kernel napríklad pre najaký MIPS alebo ARM procesor, tak sú sáčasťou aj ovládače napríklad sieť grafika atď ? Sú súčasťou aj nejaké aplikácie ako napr. Telnet server aby som sa vedel do toho pripojiť ?
    • Re: Kernel - kompilácia 03.01.2013 | 02:05
      Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
      Kernel je jadro systemu, obsahuje veci ako casovac, spravu pamate, spravu filesystemov ovladace k zariadeniam atd.

      Kompilaciou zdrojovych kodov pre urcite platformu ziskas binarne subory (kernel + ovladace) spustitelne pre tu konkretnu platformu, teda ak si to skompilujes pre ARM ziskas jadro spustitelne na ARM procesoroch.

      Aplikacie nie su sucastou kernelu. Jedna sa o samostatne programy. V svete linuxu su casto tieto programy z projektu GNU, preto najdes na internete oznacenie systemu GNU/Linux (jadro Linux a programy=userspace, GNU). Ak by si jadro linuxu vymenil za freeBSD a ponechal programy GNU, ziskas system GNU/FreeBSD. atd.
      Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
    • Re: Kernel - kompilácia 03.01.2013 | 02:24
      Avatar default Debian  Používateľ
      Jadro je len základ systému, je to jeden súbor, veľkosti okolo 5mb , nachádza sa štandardne v /boot , obsluhuje aplikácie a ich komunikáciu, moduly sa delia na vstavané, tie sú priamo v jadre, alebo externé, tie sú v priečinkoch a dodatočne sa natiahnu ak to tak nastavíš, jadro neobsahuje žiadne aplikácie. Tie moduly - to sú len rôzne ovládače zariadení , kariet, foťákov, diskov, všetkých zariadení vlastne. Možno si to aj kúsok pletieš s initrd , to s tým tiež dosť súvisí, ale to už nieje jadro, ale z názvu keď si to odvodíš "initial ramdisk", počiatočný disk, z neho sa natiahnú prvé programy, je to vlastne súbor tiež, ale on sa rozbalí a v ňom sa už vedia nachádzať tie programy, štandardne sa tam nachádza shell napríklad. O tomto určite nájdeš veľa vecí, ak ťa zaujíma teória, ak ťa zaujíma ako skompilovať jadro tak sa rovno tak spýtaj.
      R.K
      • Re: Kernel - kompilácia 03.01.2013 | 02:35
        Avatar default Debian  Používateľ
        Ešte dodám, že tá veľkosť jadra záleží od vybraných modulov.
        R.K
        • Re: Kernel - kompilácia 03.01.2013 | 09:51
          Peter   Návštevník
          Aky by bol rozdiel pri skompilovanom jadre a bezne nainstalovanym systemom? Ide o rochlost? Sorry nesmejte sa, nemam s tymto skusenost.
          • Re: Kernel - kompilácia 03.01.2013 | 10:03
            Avatar default Debian  Používateľ
            V distre je tiež bežne skompilované jadro, obvykle je v ňom podpora pre kadečo, čiže aj pre zariadenia čo nemáš - veci čo nepotrebuješ, niektoré distrá to majú tak, že scanujú hardware pri štarte a na základe toho načítajú ovládače, ty môžeš získať výkon vtedy keby si povyhadzoval všekty ovládače pre hardware , ktorý nemáš, + ešte veci čo ti ostanú môžeš nastaviť. A tú autodetekciu zakázať ak hu dané distro má, lebo to tiež niečo trvá. Ale nečakaj teraz, že budeš mať zsuper nadupané železo, zase v rámci možností.
            R.K
            • Re: Kernel - kompilácia 03.01.2013 | 10:04
              Avatar default Debian  Používateľ
              Edit: teda nie železo, ale výkon
              R.K
              • Re: Kernel - kompilácia 03.01.2013 | 10:16
                Bibibo   Návštevník
                Takze jadro +GNU je uz distro. Dobre tomu chapem ?
                • Re: Kernel - kompilácia 03.01.2013 | 10:33
                  Avatar default Debian  Používateľ
                  áno
                  R.K
                  • Re: Kernel - kompilácia 03.01.2013 | 12:00
                    Bibibo   Návštevník
                    A su teda niekde nejake navody ako previazat kernel s GNU a spravit z toho distro ? Mohol by dat niekto nejaky odkaz kde sa da nieco o tom docitat ?
                    • Re: Kernel - kompilácia 03.01.2013 | 12:10
                      Avatar default Debian  Používateľ
                      Najznámejší projekt je LFS , to je dokumentácia ako si vytvoriť vlastnú distríbúciu, ale neradím ti púšťať sa do toho, to by si preskočil moc dopredu a podľa mňa by si bol stratený, mal by si ísť postupne, na tvojom mieste by som skúsil arch linux a potom gentoo, a potom až niečo takéto, hlavne gentoo ťa naučí niektorým princípom, ktoré tam využiješ, to je ako stvorené na to , lebo má super dokumentáciu, a všetko sa tam kompiluje, ak teda nepoužiješ binárky, ale tie základy - používanie príkazov, a základných programov tam je nutnosť, takže to by si sa mal najprv naučiť - BASH, a základné programy. Ale môžeš začať už teraz vo svojom distre tým, že skúsiš skompilovať nejaký software, začal by som niečím jednoduchým, a potom by som skúsil jadro, jadro si môžeš skompilovať pre aké distro chceš. Ak máš nejaké otázky k tomu, alebo ako skompilovať software či jadro tak sa pýtaj. A dúfam, že vôbec vieš čo to tá kompilácia (alebo prekladanie) je.
                      R.K
                      • Re: Kernel - kompilácia 03.01.2013 | 16:37
                        Bibibo   Návštevník
                        Už asi polroka sa trápim s mojim HTPC. Mám tam nejaké Ubuntu mini a ovládač k DVB-S2 karte musím vždy skompilovať. Taktiež som sa aj pokúšal skompilovať Openelec s tým, že som chcel pridať do toho podporu mojej DVB-S2 karty. Išiel som podľa návodov, skompilovať Openelec sa mi podarilo, ale podpora mojej karty tam nebola. Skompilovať ovládač priamo v Openelec-u sa nedá, pretože Openelec nepozná príkaz make. Tak toto je zatiaľ moja skúsenosť. Tak idem ešte skúšať.
                        • Re: Kernel - kompilácia 03.01.2013 | 16:41
                          Avatar default Debian  Používateľ
                          Ovládač musíš skompilovať ako modul, alebo ho rovno pridať do jadra. Ako si sa to snažil spraviť?
                          R.K
                          • Re: Kernel - kompilácia 03.01.2013 | 17:39
                            Bibibo   Návštevník
                            No keď mám pravdu povedať, tak už si to ani moc nepamätám.

                            Postupoval som tuším podľa tohoto:
                            update the scripts/image and add

                            $SCRIPTS/install util-linux
                            ## BA DPLU
                            $SCRIPTS/install linux-tbs-drivers
                            ## EA DPLU

                            in directory packages/linux-drivers/linux-tbs-drivers

                            change the install script like this

                            . config/options $1

                            VER=`ls $BUILD/linux*/modules/lib/modules`

                            ## BA DPLU remove those three lines
                            #mkdir -p $INSTALL/lib/modules/$VER/tbs
                            #find $BUILD/${PKG_NAME}-${PKG_VERSION}/linux-tbs-drivers/ -name \*.ko -exec cp {} $INSTALL/lib/modules/$VER/tbs \;
                            #lib/modules/3.2.9/kernel/drivers/media

                            ## BA DPLU
                            rm -Rf $INSTALL/lib/modules/$VER/kernel/drivers/media
                            mkdir -p $INSTALL/lib/modules/$VER/kernel/drivers/media
                            find $BUILD/${PKG_NAME}-${PKG_VERSION}/linux-tbs-drivers/ -name \*.ko -exec cp {} $INSTALL/lib/modules/$VER/kernel/drivers/media \;
                            ## EA DPLU

                            mkdir -p $INSTALL/lib/firmware/
                            cp $BUILD/${PKG_NAME}-${PKG_VERSION}/*.fw $INSTALL/lib/firmware/


                            The meta file like this for the new name of zip file

                            PKG_NAME="linux-tbs-drivers"
                            PKG_VERSION="120212"
                            PKG_REV="1"
                            PKG_ARCH="any"
                            PKG_LICENSE="GPL"
                            PKG_SITE="http://www.tbsdtv.com/english/Download.html"
                            PKG_URL="http://www.tbsdtv.com/download/document/common/tbs-linux-drivers_v${PKG_VERSION}.zip"
                            PKG_DEPENDS=""
                            PKG_BUILD_DEPENDS="toolchain linux"
                            PKG_PRIORITY="optional"
                            PKG_SECTION="driver"
                            PKG_SHORTDESC="Linux TBS tuner drivers"
                            PKG_LONGDESC="Linux TBS tuner drivers"
                            PKG_IS_ADDON="no"
                            PKG_AUTORECONF="no"


                            At the end, when booting you will have a dmesg like this

                            [ 4.131235] cx23885 driver version 0.0.3 loaded
                            [ 4.131473] ACPI: PCI Interrupt Link [APC5] enabled at IRQ 16
                            [ 4.131481] cx23885 0000:04:00.0: PCI INT A -> Link[APC5] -> GSI 16 (level, low) -> IRQ 16
                            [ 4.131686] CORE cx23885[0]: subsystem: 6980:8888, board: TurboSight TBS 6980 [card=32,autodetected]
                            [ 4.907864] cx25840 4-0044: cx23885 A/V decoder found @ 0x88 (cx23885[0])
                            [ 35.807571] cx25840 4-0044: loaded v4l-cx23885-avcore-01.fw firmware (16382 bytes)
                            [ 35.814993] cx23885_dvb_register() allocating 1 frontend(s)
                            [ 35.814997] cx23885[0]: cx23885 based dvb card
                            [ 35.828449] TurboSight TBS 6980 Frontend 0 Attaching...
                            [ 35.933036] DVB: registering new adapter (cx23885[0])
                            [ 35.933041] DVB: registering adapter 0 frontend 0 (TurboSight TBS 6980 DVBS/S2 frontend)...
                            [ 35.961807] TurboSight TBS698x Dual DVB-S2 card port0 MAC=xxxxxxxxxxxxxxxxx
                            [ 35.961812] cx23885_dvb_register() allocating 1 frontend(s)
                            [ 35.961936] cx23885[0]: cx23885 based dvb card
                            [ 35.961944] TurboSight TBS 6980 Frontend 1 Attaching...
                            [ 36.043366] DVB: registering new adapter (cx23885[0])
                            [ 36.043374] DVB: registering adapter 1 frontend 0 (TurboSight TBS 6980 DVBS/S2 frontend)...
                            [ 36.071751] TurboSight TBS698x Dual DVB-S2 card port1 MAC=00:22:ab:f0:01:a7
                            [ 36.071756] cx23885_dev_checkrevision() Hardware revision = 0xb0
                            [ 36.071762] cx23885[0]/0: found at 0000:04:00.0, rev: 2, irq: 16, latency: 0, mmio: 0xfd800000
                            [ 36.071769] cx23885 0000:04:00.0: setting latency timer to 64
                            [ 36.076744] Registered IR keymap rc-tbs-nec
                            [ 36.077337] input: cx23885 IR (TurboSight TBS 6980) as /devices/pci0000:00/0000:00:0c.0/0000:04:00.0/rc/rc0/input6
                            [ 36.081007] rc0: cx23885 IR (TurboSight TBS 6980) as /devices/pci0000:00/0000:00:0c.0/0000:04:00.0/rc/rc0

                            A potom už samotná kompilácia http://wiki.openelec.tv/index.php?title=Compile_from_source.
                            Už by som do toho nešiel, pretože HTPC slúži aj ako NAS a HDD sú v RAID1. Openelec je dosť obmedzený, tak ten Ubuntu mini sa javí ako lepšia voľba.
                            • Re: Kernel - kompilácia 03.01.2013 | 17:40
                              Avatar default Debian  Používateľ
                              Tak, potom čo chceš vlastne ešte vedieť?
                              R.K
                              • Re: Kernel - kompilácia 03.01.2013 | 19:13
                                Bibibo   Návštevník
                                Možno chcem vedieť naraz strašne veľa a proste na to nemám kapacitu. Niekde som čítal, že linuxové jadro je možné použiť takmer na akejkoľvek platforme. To znamená, že ak stiahnem kernel 3.7xx, tak ho viem skompilovať pre MIPS ? A keď ho teda skompilujem pre MIPS, tak ho viem dostať do satelitu a spraviť upgrade jadra ? Ďalšia vec, čo robí napr. Ubuntu Ubuntom ? Kernel je ten istý, tak potom asi to, že používa balíčkovací systém APT ? To znamená, že ak dostanem do satelitu APT, tak môžem povedať, že mi tam beží Ubuntu ?
                                • Re: Kernel - kompilácia 03.01.2013 | 19:30
                                  Avatar default Debian  Používateľ
                                  Máš v tom veľký bordel. Jadro vôbec zo systémom nesúvisí, je prenosné, kľudne môžeš zobrať jadro s ubuntu, a dať ho do fedory, a ak bude sedieť architektúra procesora tak to normálne pôjde, jadrá sa líšia len zahrnutými modulmi a ich nastavením, veď schválne otvor si /boot nájdeš tam niečo ako vmlinuz to je jadro , jeden súbor, a potom ešte v /usr/lib/modules/* nájdeš dodatočné moduly, ktoré sa vedia natiahnuť, podľa voľby, pri nastavovaní jadra máš možnosť či má byť modul zahrnutý v jadre alebo má byť osobytne. Takže žiadne apt a ubuntu do toho nepleť, to s tým vôbec nesúvisí, to už je éra programov. Jadro len obsluhuje komunikáciu aplikácií a ovládačov, obsluhuje procesy a tak.
                                  R.K
                                  • Re: Kernel - kompilácia 03.01.2013 | 19:34
                                    Avatar default Debian  Používateľ
                                    To, že ty spustíš jadro nestačí, za ním už nasleduje éra programov - to je práve ten ramdisk, tam sa natiahnu prvé scripty čo pospúšťajú základné programy - napríklad démony, tam môže byť napríklad display manager, ak poznáš gdm napríklad, ten natiahne zas sedenie a ďalšie veci čo sú mu zadné, čiže súčasti prostredia. Skúsim ti nakresliť schému.
                                    R.K
                                • Re: Kernel - kompilácia 03.01.2013 | 20:40
                                  Avatar default Debian  Používateľ
                                  SCHÉMA Tu to je, je to kúsok zjednodušené, ber to ako ukážkový príklad , takto nejak to celé funguje
                                  R.K
                                  • Re: Kernel - kompilácia 05.01.2013 | 12:19
                                    Avatar default Debian  Používateľ
                                    takže schému som aktualizoval - link - opravil som chybu čo som tam mal, + trochu to prerobil a pár vecí pridal, znova, ale zdôrazňujem, že ide o konkrétny príklad s konkrétnymi programy, a nemusí to preto všade takto vyzerať
                                    R.K
                                    • Re: Kernel - kompilácia 20.01.2013 | 10:38
                                      Avatar default Debian  Používateľ
                                      Ďakujem Vojtechovi Zacharovi za nájdenie chyby, ktorú som prehliadol, nová verzia - link . Plus som ešte niečo pridal.
                                      R.K
    • Re: Kernel - kompilácia 03.01.2013 | 23:51
      Avatar Miroslav Bendík Gentoo  Administrátor
      Aplikácie sa na MIPS / ARM väčšinou nekompilujú samostatne, ale ako súčasť busyboxu. Mám tu okolo zopár zariadení, pre ktoré som kompiloval kernel aj s busyboxom ako je napr. router, TV ... Kernel sa zvyčajne balí spolu s nejakým readonly filesystémom (squashfs) a busyboxom a bootuje sa pomocou ubootu (nástroje na vytvorenie uboot imagu sú dostupné, treba však nastaviť správne entry point kernelu). Celkovo by som odporúčal skôr nájsť hotové SDK pre danú platformu, kde by sa tieto veci mali už pomocou napísaných skriptov inak je to celkom peklo, na ktoré by som si ani ja sám netrúfal.
      • Re: Kernel - kompilácia 04.01.2013 | 01:41
        Bibibo   Návštevník
        Radovan, výborná schéma. Naozaj si si dal záležať. Chlapci, mám obrovský problém tomu pochopiť až mi je to divne, pretože v strednej škole nebola ani zmienka o linuxe. A teraz vidím, že čoraz viac zariadení v domácnosti sú založené na linuxe. Asi to chce nejakú osobnú diskusiu alebo kurz. Musím sa po niečom poobzerať. Hm
        • Re: Kernel - kompilácia 04.01.2013 | 01:47
          Avatar default Debian  Používateľ
          Tak si ma pridaj na jabberi, alebo na google talk , ak máš gmail, kontakt je v info o mne, ja si myslím, že týmto veciam celkom rozumiem, jadro už som kompiloval - prispôsoboval. Základy ti vysvetlím.
          R.K
    • Re: Kernel - kompilácia 20.01.2013 | 11:36
      Avatar ferri Fedora  Používateľ
      Treba si najskôr vytvoriť základ.

      http://www.amazon.com/Understanding-Linux-Kernel-Third-Edition/dp/0596005652/ref=pd_sim_b_10
      http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468/ref=pd_sim_b_2

      Na internete sú tieto knihy dostupné aj v pdf. Treba len trocha hľadať cez google.