හැඳින්වීම
මෙම ලිපි මාලාවේ, මට buildroot බෙදාහැරීමේ ගොඩනැගීමේ පද්ධතිය දෙස බැලීමට අවශ්ය වන අතර එය අභිරුචිකරණය කිරීමේ මගේ අත්දැකීම් බෙදා ගැනීමට අවශ්යය. චිත්රක අතුරුමුහුණතක් සහ අවම ක්රියාකාරිත්වය සහිත කුඩා OS නිර්මාණය කිරීමේ ප්රායෝගික අත්දැකීම් ඇත.
පළමුවෙන්ම, ඔබ ගොඩනැගීමේ පද්ධතිය සහ බෙදා හැරීම ව්යාකූල නොකළ යුතුය. Buildroot හට ලබා දෙන පැකේජ කට්ටලයකින් පද්ධතියක් ගොඩනගා ගත හැකිය. Buildroot සෑදී ඇත්තේ Makefiles මත වන අතර එම නිසා අතිවිශාල අභිරුචිකරණ හැකියාවන් ඇත. පැකේජයක් වෙනත් අනුවාදයකින් ප්රතිස්ථාපනය කරන්න, ඔබේම පැකේජයක් එක් කරන්න, පැකේජයක් තැනීමේ නීති වෙනස් කරන්න, සියලුම පැකේජ ස්ථාපනය කිරීමෙන් පසු ගොනු පද්ධතිය අභිරුචිකරණය කරන්න? buildroot වලට මේ සියල්ල කරන්න පුළුවන්.
රුසියාවේ, buildroot භාවිතා වේ, නමුත් මගේ මතය අනුව ආරම්භකයින් සඳහා කුඩා රුසියානු භාෂා තොරතුරු ඇත.
කාර්යයේ ඉලක්කය වන්නේ සජීවී බාගැනීම්, icewm අතුරුමුහුණත සහ බ්රවුසරය සමඟ බෙදාහැරීමේ කට්ටලයක් එකලස් කිරීමයි. ඉලක්ක වේදිකාව වන්නේ virtualbox වේ.
ඔබේම බෙදාහැරීම ගොඩනඟන්නේ ඇයි? බොහෝ විට සීමිත සම්පත් සමඟ සීමිත ක්රියාකාරිත්වය අවශ්ය වේ. ඊටත් වඩා බොහෝ විට ස්වයංක්රීයකරණයේදී ඔබට ස්ථිරාංග සෑදිය යුතුය. අනවශ්ය පැකේජ පිරිසිදු කර එය ස්ථිරාංග බවට පත් කිරීමෙන් සාමාන්ය කාර්ය බෙදාහැරීමක් අනුවර්තනය කිරීම නව බෙදාහැරීමක් ගොඩනැගීමට වඩා ශ්රම-දැඩි වේ. Gentoo භාවිතා කිරීම ද එහි සීමාවන් ඇත.
Buildroot පද්ධතිය ඉතා බලවත්, නමුත් එය ඔබට කිසිවක් නොකරනු ඇත. එය එකලස් කිරීමේ ක්රියාවලිය සක්රීය කිරීම සහ ස්වයංක්රීය කිරීම පමණි.
විකල්ප ගොඩනැගීමේ පද්ධති (yocto, open build system සහ වෙනත්) සලකා බැලීම හෝ සංසන්දනය කිරීම සිදු නොවේ.
එය ලබා ගන්නේ කොහෙන්ද සහ ආරම්භ කරන්නේ කෙසේද
ව්යාපෘති වෙබ් අඩවිය -
Buildroot විසින් ගොඩනැගීමේ ඉලක්ක පුවරුව සඳහා defconfigs ක්රියාත්මක කරයි. Defconfig යනු පෙරනිමි අගයන් නොමැති විකල්ප පමණක් ගබඩා කරන වින්යාස ගොනුවකි. එකතු කරන්නේ කුමක්ද සහ කෙසේද යන්න තීරණය කරන්නේ ඔහුය. මෙම අවස්ථාවේදී, ඔබට busybox, linux-kernel, uglibc, u-boot සහ barebox bootloaders වල වින්යාසයන් වෙන වෙනම වින්යාසගත කළ හැකිය, නමුත් ඒවා සියල්ලම ඉලක්ක පුවරුවට බැඳී ඇත.
බාගත කළ සංරක්ෂිතය ඉවත් කිරීමෙන් හෝ git වෙතින් ක්ලෝන කිරීමෙන් පසුව, අපට භාවිතයට සූදානම් බිල්ඩ්රූට් එකක් ලැබේ. අත්පොතෙහි ඇති නාමාවලි ව්යුහය ගැන ඔබට වැඩිදුර කියවිය හැකිය; වඩාත්ම වැදගත් ඒවා ගැන මම ඔබට කියමි:
මණ්ඩලය - එක් එක් පුවරුව සඳහා විශේෂිත ගොනු සහිත නාමාවලියක්. මේවා පද්ධති රූප (iso, sdcart, cpio සහ වෙනත්) සැකසීම සඳහා ස්ක්රිප්ට් විය හැක, උඩැතිරි නාමාවලියක්, කර්නල් වින්යාසය, ආදිය.
වින්යාස - පුවරුවේ සැබෑ defconfig. Defconfig යනු අසම්පූර්ණ පුවරු වින්යාසයකි. එය පෙරනිමි සැකසුම් වලින් වෙනස් වන පරාමිතීන් පමණක් ගබඩා කරයි
dl — එකලස් කිරීම සඳහා බාගත කළ මූලාශ්ර කේත/ගොනු සහිත නාමාවලිය
ප්රතිදානය / ඉලක්කය — ප්රතිඵලයක් ලෙස OS හි එකලස් කරන ලද ගොනු පද්ධතිය. පසුව, බාගත කිරීම / ස්ථාපනය කිරීම සඳහා පින්තූර එයින් සාදනු ලැබේ
ප්රතිදානය / සත්කාරක - එකලස් කිරීම සඳහා සත්කාරක උපයෝගිතා
ප්රතිදානය / ගොඩනැගීම - එකලස් කළ පැකේජ
එකලස් කිරීම KConfig හරහා වින්යාස කර ඇත. Linux kernel එක තැනීමටද එම පද්ධතියම භාවිතා කරයි. බහුලව භාවිතා වන විධාන ලැයිස්තුව (buildroot බහලුම තුල ක්රියාත්මක කරන්න):
- menuconfig කරන්න - ගොඩනැගීමේ වින්යාසය අමතන්න. ඔබට චිත්රක අතුරුමුහුණත ද භාවිතා කළ හැකිය (nconfig කරන්න, xconfig කරන්න, gconfig කරන්න)
- linux-menuconfig කරන්න - කර්නල් වින්යාසය අමතන්න.
- පිරිසිදු කරන්න - ගොඩනැගීමේ ප්රතිඵල පිරිසිදු කරන්න (සියල්ල ප්රතිදානයේ ගබඩා කර ඇත)
- සාදන්න - පද්ධතියක් ගොඩනඟන්න. මෙය දැනටමත් එකලස් කර ඇති ක්රියාවලි නැවත එකලස් නොකරයි.
- defconfig_name සාදන්න - වින්යාසය නිශ්චිත defconfig එකකට මාරු කරන්න
- list-defconfigs කරන්න - defconfigs ලැයිස්තුවක් පෙන්වන්න
- මූලාශ්රය සාදන්න - ගොඩ නැගීමකින් තොරව ස්ථාපන ගොනු බාගන්න.
- උදව් කරන්න - හැකි විධාන ලැයිස්තුගත කරන්න
වැදගත් සටහන් සහ ප්රයෝජනවත් උපදෙස්
Buildroot දැනටමත් ගොඩනගා ඇති පැකේජ නැවත ගොඩනඟන්නේ නැත! එබැවින්, සම්පූර්ණ නැවත සකස් කිරීම අවශ්ය වන තත්වයක් මතු විය හැකිය.
ඔබට විධානය සමඟ වෙනම පැකේජයක් නැවත ගොඩනගා ගත හැකිය Packagename-rebuild කරන්න. උදාහරණයක් ලෙස, ඔබට Linux කර්නලය නැවත ගොඩනැගිය හැක:
make linux-rebuild
ප්රතිදාන/බිල්ඩ්/$packagename නාමාවලියෙහි .මුද්දර ගොනු සෑදීමෙන් Buildroot ඕනෑම පැකේජයක තත්ත්වය ගබඩා කරයි:
එමනිසා, ඔබට පැකේජ නැවත ගොඩනැංවීමකින් තොරව root-fs සහ පින්තූර නැවත ගොඩනැගිය හැක:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
ප්රයෝජනවත් විචල්යයන්
buildroot පහසු වින්යාසය සඳහා විචල්ය සමූහයක් ඇත
- $TOPDIR - buildroot නාමාවලිය
- $BASEDIR - OUTPUT නාමාවලිය
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, target fs build directories.
- $BUILD_DIR - ඇසුරුම් නොකළ සහ සාදන ලද පැකේජ සහිත නාමාවලිය
දෘශ්යකරණය
buildroot හට දෘශ්යකරණ විශේෂාංගයක් ඇත.ඔබට අවසාන පද්ධතිය තුළ පරායත්ත රූප සටහනක්, ගොඩනැගීමේ කාල ප්රස්ථාරයක් සහ පැකේජ ප්රමාණයේ ප්රස්ථාරයක් ගොඩනගා ගත හැක. ප්රතිඵල pdf ගොනු ආකාරයෙන් (ඔබට svn,png වලින් තෝරා ගත හැක) ප්රතිදාන/ප්රස්ථාර නාමාවලියෙහි ඇත.
දෘශ්යකරණ විධාන සඳහා උදාහරණ:
make graph-depends
යැපුම් ගසක් සාදන්නmake <pkg>-graph-depends
විශේෂිත පැකේජයක් සඳහා පරායත්ත ගසක් සාදන්නBR2_GRAPH_OUT=png make graph-build
PNG ප්රතිදානය සමඟ ගොඩනඟන කාලය සැලසුම් කරන්නmake graph-size
ප්ලොට් පැකට් ප්රමාණය
ප්රයෝජනවත් ස්ක්රිප්ට්
buildroot නාමාවලියෙහි උප බහලුමක් ඇත උපයෝගිතා ප්රයෝජනවත් ස්ක්රිප්ට් සමඟ. උදාහරණයක් ලෙස, පැකේජ විස්තරවල නිවැරදි බව පරීක්ෂා කරන ස්ක්රිප්ට් එකක් තිබේ. ඔබගේම පැකේජ එකතු කිරීමේදී මෙය ප්රයෝජනවත් විය හැක (මම මෙය පසුව කරන්නම්). utils/readme.txt ගොනුවේ මෙම ස්ක්රිප්ට් වල විස්තරයක් අඩංගු වේ.
අපි කොටස් බෙදාහැරීමක් ගොඩනඟමු
සියලුම මෙහෙයුම් සිදු කරනු ලබන්නේ සාමාන්ය පරිශීලකයෙකු වෙනුවෙන් මිස root නොවන බව මතක තබා ගැනීම වැදගත්ය.
සියලුම විධානයන් බිල්ඩ්රූට් තුළ ක්රියාත්මක වේ. බිල්ඩ්රූට් පැකේජයේ දැනටමත් බොහෝ පොදු පුවරු සහ අථත්යකරණය සඳහා වින්යාස කට්ටලයක් ඇතුළත් වේ.
සැකසුම් ලැයිස්තුව දෙස බලමු:
qemu_x86_64_defconfig config වෙත මාරු වන්න
make qemu_x86_64_defconfig
ඒ වගේම අපි එකලස් කිරීම ආරම්භ කරමු
make
ගොඩනැගීම සාර්ථකව අවසන්, ප්රතිඵල බලන්න:
Buildroot විසින් ඔබට Qemu හි ධාවනය කළ හැකි පින්තූර සම්පාදනය කර ඇති අතර ඒවා ක්රියා කරන බව තහවුරු කර ඇත.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
ප්රතිඵලය වන්නේ qemu හි ක්රියාත්මක වන පද්ධතියකි:
ඔබේම පුවරු වින්යාසය නිර්මාණය කිරීම
පුවරු ගොනු එකතු කිරීම
සැකසුම් ලැයිස්තුව දෙස බලමු:
ලැයිස්තුවේ අපි දකින්නේ pc_x86_64_efi_defconfig. වින්යාසයෙන් පිටපත් කිරීමෙන් අපි අපගේම පුවරුවක් සාදන්නෙමු:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
අපගේ ස්ක්රිප්ට්, rootfs-overlay සහ අනෙකුත් අවශ්ය ගොනු ගබඩා කිරීම සඳහා අපි වහාම පුවරු නාමාවලියක් නිර්මාණය කරමු:
mkdir board/my_x86_board
මෙම defconfig වෙත මාරු වන්න:
make my_x86_board_defconfig
මේ අනුව, දැන් ගොඩනැගීමේ වින්යාසය (buildroot බහලුමේ මූලයේ .config හි ගබඩා කර ඇත) x86-64 legacy(bios) ඇරඹුම් ඉලක්ක යන්ත්රයට අනුරූප වේ.
අපි linux-kernel වින්යාසය පිටපත් කරමු (පසුව ප්රයෝජනවත් වේ):
cp board/pc/linux.config board/my_x86_board/
KConfig හරහා ගොඩනැගීමේ පරාමිතීන් සැකසීම
අපි පිහිටුවීම ආරම්භ කරමු:
make menuconfig
KConfig කවුළුව විවෘත වේ. චිත්රක අතුරුමුහුණතක් සමඟ වින්යාසගත කළ හැකිය (nconfig කරන්න, xconfig කරන්න, gconfig කරන්න):
අපි පළමු කොටසට ඇතුල් කරන්න ඉලක්ක විකල්ප. මෙහිදී ඔබට ගොඩනැගීම සිදු කරනු ලබන ඉලක්ක ගෘහ නිර්මාණ ශිල්පය තෝරාගත හැක.
ගොඩනැගීමේ විකල්ප - මෙහි විවිධ ගොඩනැගීමේ සැකසුම් ඇත. ඔබට ප්රභව කේත සහිත නාමාවලි, ගොඩනැගීමේ නූල් ගණන, ප්රභව කේත බාගත කිරීම සඳහා දර්පණ සහ වෙනත් සැකසුම් නියම කළ හැක. සැකසුම් පෙරනිමියෙන් තබමු.
මෙවලම් දාමය - ගොඩනැගීමේ මෙවලම් මෙහි වින්යාස කර ඇත. ඔහු ගැන වැඩිදුර කියවන්න.
මෙවලම් දාම වර්ගය - භාවිතා කරන මෙවලම් වර්ගය. මෙය බිල්ඩ්රූට් තුළට ගොඩනගා ඇති මෙවලම් දාමයක් හෝ බාහිර එකක් විය හැකිය (ඔබට දැනටමත් ගොඩනගා ඇති ඩිරෙක්ටරිය හෝ බාගැනීම සඳහා url එක සමඟින් සඳහන් කළ හැක). විවිධ ගෘහ නිර්මාණ ශිල්පය සඳහා අමතර විකල්ප තිබේ. උදාහරණයක් ලෙස, හස්තය සඳහා ඔබට බාහිර මෙවලම් දාමයේ ලිනරෝ අනුවාදය සරලව තෝරා ගත හැකිය.
C පුස්තකාලය - C පුස්තකාලය තෝරාගැනීම සම්පූර්ණ පද්ධතියේ ක්රියාකාරිත්වය මේ මත රඳා පවතී. සාමාන්යයෙන්, glibc භාවිතා වේ, එය හැකි සියලුම ක්රියාකාරීත්වයන්ට සහය දක්වයි. නමුත් එය කාවැද්දූ පද්ධතියකට වඩා විශාල විය හැක, එබැවින් uglibc හෝ musl බොහෝ විට තෝරා ගනු ලැබේ. අපි glibc තෝරා ගනිමු (මෙය systemd භාවිතා කිරීමට පසුව අවශ්ය වේ).
කර්නල් ශීර්ෂ සහ අභිරුචි කර්නල් ශීර්ෂ මාලාව - එකලස් කළ පද්ධතියේ ඇති කර්නලයේ අනුවාදයට ගැළපිය යුතුය. කර්නල් ශීර්ෂ සඳහා, ඔබට තාරබෝල් හෝ git ගබඩාවට යන මාර්ගයද සඳහන් කළ හැක.
GCC COMPILER අනුවාද - ගොඩනැගීම සඳහා භාවිතා කළ යුතු සම්පාදක අනුවාදය තෝරන්න
C++ සහය සක්රීය කරන්න - පද්ධතියේ C++ පුස්තකාල සඳහා සහය ඇතිව ගොඩනැගීමට තෝරන්න. මෙය අනාගතයේදී අපට ප්රයෝජනවත් වනු ඇත.
අමතර gcc විකල්ප - ඔබට අතිරේක සම්පාදක විකල්ප සැකසිය හැක. අපිට දැනට අවශ්ය නැහැ.
පද්ධති වින්යාසය මඟින් සාදන ලද පද්ධතියේ අනාගත පරාමිතීන් සැකසීමට ඔබට ඉඩ සලසයි:
මාතෘකාවෙන් බොහෝ කරුණු පැහැදිලිය. පහත කරුණු කෙරෙහි අවධානය යොමු කරමු:
පරිශීලක වගු වෙත මාර්ගය - නිර්මාණය කළ යුතු පරිශීලකයන් සහිත වගුව (
උදාහරණ ගොනුව. පරිශීලක පරිශීලකයා මුරපද පරිපාලක, ස්වයංක්රීයව gid/uid, /bin/sh shell, පෙරනිමි කණ්ඩායම් පරිශීලකයා, කණ්ඩායම් සාමාජික මූල, අදහස් Foo පරිශීලක සමඟ නිර්මාණය වනු ඇත.
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
Root filesystem overlay directories - එකලස් කරන ලද target-fs මත උඩින් ඇති නාමාවලිය. නව ගොනු එකතු කර පවතින ඒවා ප්රතිස්ථාපනය කරයි.
ගොනු පද්ධති රූප සෑදීමට පෙර ධාවනය කිරීමට අභිරුචි ස්ක්රිප්ට් - ගොනු පද්ධතිය රූපවලට නැවීමට පෙර වහාම ක්රියාත්මක කරන ලද ස්ක්රිප්ට්. දැනට පිටපත හිස්ව තබමු.
අපි කර්නල් අංශයට යමු
කර්නල් සැකසුම් මෙහි සකසා ඇත. කර්නලයම වින්යාස කර ඇත්තේ make linux-menuconfig හරහාය.
ඔබට කර්නල් අනුවාදය විවිධ ආකාරවලින් සැකසිය හැක: ඉදිරිපත් කරන ලද ඒවායින් තෝරන්න, අනුවාදය අතින් ඇතුල් කරන්න, ගබඩාවක් හෝ සූදානම් කළ තාරබෝලයක් සඳහන් කරන්න.
කර්නල් වින්යාසය - කර්නල් වින්යාසය සඳහා මාර්ගය. ඔබට ලිනක්ස් වෙතින් තෝරාගත් ගෘහ නිර්මාණ ශිල්පය හෝ defocnfig සඳහා පෙරනිමි වින්යාසය තෝරාගත හැක. Linux මූලාශ්රයේ විවිධ ඉලක්ක පද්ධති සඳහා defconfigs කට්ටලයක් අඩංගු වේ. ඔබට අවශ්ය එකක් සොයාගත හැකිය
ටාගට් පැකේජ අංශය මඟින් ගොඩනගන පද්ධතිය මත ස්ථාපනය කරන්නේ කුමන පැකේජද යන්න තේරීමට ඔබට ඉඩ සලසයි. දැනට එය නොවෙනස්ව තබමු. අපි පසුව මෙම ලැයිස්තුවට අපගේ පැකේජ එකතු කරන්නෙමු.
ගොනු පද්ධති රූප - එකතු කරනු ලබන ගොනු පද්ධති රූප ලැයිස්තුවකි. iso රූපයක් එක් කරන්න
Bootloaders - එකතු කිරීමට bootloaders තෝරාගැනීම. අපි isolinix තෝරා ගනිමු
Systemd වින්යාස කිරීම
Systemd kernel සහ glibc සමඟින් Linux හි කුළුණු වලින් එකක් බවට පත්වෙමින් තිබේ. එමනිසා, මම එහි සැකසුම වෙනම අයිතමයකට ගෙන ගියෙමි.
Make menuconfig හරහා වින්යාස කර, පසුව ඉලක්ක පැකේජ → පද්ධති මෙවලම් → systemd. පද්ධතිය ආරම්භ වන විට කුමන systemd සේවාවන් ස්ථාපනය කර ආරම්භ කරන්නේද යන්න මෙහිදී ඔබට නියම කළ හැක.
පද්ධති වින්යාසය සුරැකීම
අපි මෙම වින්යාසය KConfig හරහා සුරකිමු.
ඉන්පසු අපගේ defconfig සුරකින්න:
make savedefconfig
ලිනක්ස් කර්නල් වින්යාසය
Linux කර්නල් වින්යාසය පහත විධානය සමඟ ක්රියාත්මක වේ:
make linux-menuconfig
Virtualbox වීඩියෝ කාඩ්පත සඳහා සහය එක් කරමු
අපි Virtualbox Guest ඒකාබද්ධ කිරීමේ සහාය එක් කරමු
සුරැකීමට සහ පිටවීමේ. වැදගත්: වින්යාසය output/build/linux-$version/config හි සුරැකෙනු ඇත, නමුත් board/my_x86_board/linux.config හි නොවේ
එබැවින්, ඔබ විසින් වින්යාසය ගබඩා ස්ථානයකට අතින් පිටපත් කළ යුතුය:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
ඉන් පසු අපි සම්පූර්ණ පද්ධතියේ සම්පූර්ණ නැවත එකලස් කිරීමක් සිදු කරන්නෙමු. buildroot දැනටමත් ගොඩනගා ඇති දේ නැවත ගොඩනඟන්නේ නැත, ඔබ නැවත ගොඩනැගීම සඳහා පැකේජ අතින් නියම කළ යුතුය. කාලය හා ස්නායු නාස්ති නොකිරීමට, කුඩා පද්ධතියක් සම්පූර්ණයෙන්ම නැවත ගොඩනැඟීම පහසුය:
make clean;make
එකලස් කිරීම අවසන් වූ පසු, VirtualBox (5.2 සහ 6.0 අනුවාදවල පරීක්ෂා කර ඇත) CD තැටියෙන් ආරම්භ කිරීම දියත් කරන්න. පද්ධති පරාමිතීන්:
එකලස් කරන ලද iso වෙතින් ධාවනය:
භාවිතා කරන ද්රව්ය ලැයිස්තුව
- Buildroot අත්පොත
මූලාශ්රය: www.habr.com