In hierdie afdeling kyk ek na sommige van die aanpassingsopsies wat ek nodig gehad het. Dit is nie 'n volledige lys van wat buildroot bied nie, maar hulle is redelik funksioneel en vereis nie ingryping in die lĂȘers van buildroot self nie.
Gebruik die EKSTERNE meganisme vir aanpassing
Ons het na 'n eenvoudige voorbeeld van die byvoeging van jou eie konfigurasie gekyk deur die bord se defconfig en die nodige lĂȘers direk by die Buildroot-gids by te voeg.
Maar hierdie metode is nie baie gerieflik nie, veral as u buildroot bywerk. Daar is 'n meganisme om hierdie probleem op te los eksterne boom. Die essensie daarvan is dat jy bord, konfigurasies, pakkette en ander gidse in 'n aparte gids kan stoor (ek gebruik byvoorbeeld die patches-gids om pleisters op pakkette toe te pas, meer besonderhede in 'n aparte afdeling) en buildroot self sal dit by dié in sy gids.
Let wel: jy kan verskeie eksterne bome gelyktydig oorlĂȘ, daar is 'n voorbeeld in die bouwortelhandleiding
Kom ons skep 'n gids my_tree, geleĂ« langs die buildroot gids en dra ons konfigurasie daarheen. Die uitvoer moet die volgende lĂȘerstruktuur wees:
[alexey@alexey-pc my_tree]$ tree
.
âââ board
â âââ my_x86_board
â âââ bef_cr_fs_img.sh
â âââ linux.config
â âââ rootfs_overlay
â âââ users.txt
âââ Config.in
âââ configs
â âââ my_x86_board_defconfig
âââ external.desc
âââ external.mk
âââ package
âââ patches
6 directories, 7 filesSoos u kan sien, herhaal die struktuur oor die algemeen die struktuur van bouwortel.
ĐаŃĐ°Đ»ĐŸĐł raad bevat lĂȘers spesifiek vir elke raad in ons geval:
- bef_cr_fs_img.sh is 'n skrip wat uitgevoer sal word nadat die teikenlĂȘerstelsel gebou is, maar voordat dit in beelde verpak is. Ons sal dit in die toekoms gebruik
- linux.config - kernkonfigurasie
- rootfs_overlay - gids om bo-op die teikenlĂȘerstelsel te bedek
- users.txt - 'n lĂȘer wat die gebruikers beskryf wat geskep moet word
ĐаŃĐ°Đ»ĐŸĐł configs bevat defconfig van ons borde. Ons het net een.
pakket - katalogus met ons pakkette. Aanvanklik bevat buildroot beskrywings en reëls vir die bou van 'n beperkte aantal pakkette. Later sal ons die icewm-vensterbestuurder en die Slim grafiese aanmeldbestuurder hier byvoeg.
Patches - laat jou toe om jou pleisters gerieflik vir verskillende pakkette te stoor. Meer besonderhede in 'n aparte afdeling hieronder.
Nou moet ons die beskrywingslĂȘers vir ons eksterne boom byvoeg. Daar is 3 lĂȘers wat hiervoor verantwoordelik is: external.desc, Config.in, external.mk.
ekstern.beskrywing bevat die werklike beskrywing:
[alexey@alexey-pc my_tree]$ cat external.desc
name: my_tree
desc: My simple external-tree for articleDie eerste reĂ«l is die titel. In die toekoms bouwortel skep 'n veranderlike $(BR2_EXTERNAL_MY_TREE_PATH), wat gebruik moet word wanneer die samestelling gekonfigureer word. Byvoorbeeld, die pad na die gebruikerlĂȘer kan soos volg gestel word:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txtDie tweede reël is 'n kort, mens-leesbare beskrywing.
Config.in, ekstern.mk - lĂȘers om bygevoegde pakkette te beskryf. As jy nie jou eie pakkette byvoeg nie, kan hierdie lĂȘers leeg gelaat word. Vir eers is dit wat ons sal doen.
Nou het ons ons eksterne boom gereed, wat die defconfig van ons bord en die lĂȘers wat dit benodig bevat. Kom ons gaan na die buildroot-gids en spesifiseer om eksterne boom te gebruik:
[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfigIn die eerste opdrag gebruik ons ââdie argument BR2_EXTERNAL=../my_tree/, wat die gebruik van 'n eksterne boom aandui. Jy kan verskeie eksterne-bome vir gebruik op dieselfde tyd spesifiseer. In hierdie geval hoef jy dit net een keer te doen, waarna 'n lĂȘeruitset/.br-external.mk geskep word wat stoor inligting oor die eksterne boom wat gebruik word:
[alexey@alexey-pc buildroot]$ cat output/.br-external.mk
#
# Automatically generated file; DO NOT EDIT.
#
BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES =
BR2_EXTERNAL_DIRS =
BR2_EXTERNAL_MKS =
BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for articleBelangrik! Die paaie in hierdie lĂȘer sal absoluut wees!
'n Eksterne opsie-item het in die kieslys verskyn:

Hierdie subkieslys sal ons pakkette van ons eksterne boom bevat. Hierdie afdeling is tans leeg.
Nou is dit vir ons belangriker om die nodige paaie te herskryf om eksterne-boom te gebruik.
Neem asseblief kennis dat in die Bou-opsies â Ligging om buildroot-konfigurasie te stoor, daar 'n absolute pad na die gestoorde defconfig sal wees. Dit word gevorm op die oomblik dat die gebruik van extgernal_tree gespesifiseer word.
Ons sal ook die paaie in die Stelselkonfigurasie-afdeling regstel. Vir 'n tabel met geskepte gebruikers:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txtIn die kern-afdeling, verander die pad na die kernkonfigurasie:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configNou sal ons lĂȘers van ons eksterne boom tydens samestelling gebruik word. Wanneer ons na 'n ander gids beweeg of die bouwortel bywerk, sal ons 'n minimum van probleme hĂȘ.
Voeg wortel fs-oorleg by:
Hierdie meganisme laat jou toe om lĂȘers maklik by te voeg/vervang in die teikenlĂȘerstelsel.
As die lĂȘer in root fs-oorleg is, maar nie in teiken nie, sal dit bygevoeg word
As die lĂȘer in root fs-oorleg en in teiken is, sal dit vervang word.
Kom ons stel eers die pad na root fs overlay dir. Dit word gedoen in die Stelselkonfigurasie â WortellĂȘerstelsel-oorleggidse afdeling:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/Kom ons skep nou twee lĂȘers.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts
127.0.0.1 localhost
127.0.1.1 my_small_linux
8.8.8.8 google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt
This is new file from overlayDie eerste lĂȘer (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) sal die /etc/hosts-lĂȘer op die voltooide stelsel vervang. Die tweede lĂȘer (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) sal bygevoeg word.
Ons versamel en kontroleer:

Uitvoering van pasmaakskrifte in verskillende stadiums van stelselsamestelling
Dikwels moet jy werk binne die teikenlĂȘerstelsel verrig voordat dit in beelde verpak word.
Dit kan gedoen word in die Stelselkonfigurasie-afdeling:

Die eerste twee skrifte word uitgevoer nadat die teikenlĂȘerstelsel gebou is, maar voordat dit in beelde verpak is. Die verskil is dat die fakeroot-skrip in die konteks van fakeroot uitgevoer word, wat werk as die wortelgebruiker simuleer.
Die laaste skrip word uitgevoer nadat die stelselbeelde geskep is. Jy kan bykomende aksies daarin uitvoer, byvoorbeeld, kopieer die nodige lĂȘers na 'n NFS-bediener of skep 'n prent van jou toestel se firmware.
As 'n voorbeeld sal ek 'n skrip skep wat die weergawe en boudatum sal skryf na /etc/.
Eerstens sal ek die pad na hierdie lĂȘer in my eksterne boom aandui:

En nou die skrif self:
[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-releaseNa samestelling kan u hierdie lĂȘer op die stelsel sien.
In die praktyk kan die draaiboek groot word. Daarom het ek in die regte projek 'n meer gevorderde roete geneem:
- Ek het 'n gids geskep (my_tree/board_my_x86_board/inside_fakeroot_scripts) waarin daar skrifte is wat uitgevoer moet word, met reeksnommers. Byvoorbeeld, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
- Ek het 'n skrif geskryf (my_tree/board_my_x86_board/run_inside_fakeroot.sh) wat deur hierdie gids gaan en die skrifte wat daarin vervat is, opeenvolgend uitvoer
- Spesifiseer hierdie skrif in die bordinstellings in die Stelselopstelling -> Pasgemaakte skrifte om binne die fakeroot-omgewing ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) te loop
Bron: will.com
