பில்ட்ரூட் - பகுதி 2. உங்கள் பலகை உள்ளமைவை உருவாக்குதல்; வெளிப்புற மரத்தைப் பயன்படுத்துதல், ரூட்ஃப்ஸ்-மேலடுக்கு, பிந்தைய உருவாக்க ஸ்கிரிப்ட்கள்

இந்தப் பிரிவில் எனக்குத் தேவையான சில தனிப்பயனாக்குதல் விருப்பங்களைப் பார்க்கிறேன். இது பில்ட்ரூட் சலுகைகளின் முழுமையான பட்டியல் அல்ல, ஆனால் அவை மிகவும் செயல்பாட்டுடன் உள்ளன மற்றும் பில்ட்ரூட்டின் கோப்புகளில் தலையீடு தேவையில்லை.

தனிப்பயனாக்கலுக்கான வெளிப்புற பொறிமுறையைப் பயன்படுத்துதல்

முந்தைய கட்டுரையில் போர்டின் defconfig மற்றும் தேவையான கோப்புகளை நேரடியாக Buildroot கோப்பகத்தில் சேர்ப்பதன் மூலம் உங்கள் சொந்த உள்ளமைவைச் சேர்ப்பதற்கான எளிய உதாரணத்தைப் பார்த்தோம்.

ஆனால் இந்த முறை மிகவும் வசதியானது அல்ல, குறிப்பாக பில்ட்ரூட்டைப் புதுப்பிக்கும் போது. இந்த சிக்கலை தீர்க்க ஒரு பொறிமுறை உள்ளது வெளிப்புற மரம். அதன் சாராம்சம் என்னவென்றால், நீங்கள் பலகை, கட்டமைப்புகள், தொகுப்புகள் மற்றும் பிற கோப்பகங்களை ஒரு தனி கோப்பகத்தில் சேமிக்கலாம் (உதாரணமாக, பேட்ச்களை பேக்கேஜ்களுக்குப் பயன்படுத்த பேட்ச் டைரக்டரியைப் பயன்படுத்துகிறேன், மேலும் விவரங்கள் ஒரு தனி பிரிவில்) மற்றும் பில்ட்ரூட் தானே அவற்றைச் சேர்க்கும். அதன் அடைவு.

குறிப்பு: நீங்கள் ஒரே நேரத்தில் பல வெளிப்புற மரங்களை மேலெழுதலாம், பில்ட்ரூட் கையேட்டில் ஒரு எடுத்துக்காட்டு உள்ளது

பில்ட்ரூட் கோப்பகத்திற்கு அடுத்ததாக அமைந்துள்ள my_tree கோப்பகத்தை உருவாக்கி, அங்கு நமது உள்ளமைவை மாற்றுவோம். வெளியீடு பின்வரும் கோப்பு கட்டமைப்பாக இருக்க வேண்டும்:

[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 files

நீங்கள் பார்க்க முடியும் என, பொதுவாக கட்டமைப்பு பில்ட்ரூட்டின் கட்டமைப்பை மீண்டும் செய்கிறது.

அடைவு குழு எங்கள் விஷயத்தில் ஒவ்வொரு போர்டுக்கும் குறிப்பிட்ட கோப்புகள் உள்ளன:

  • bef_cr_fs_img.sh என்பது ஒரு ஸ்கிரிப்ட் ஆகும், இது இலக்கு கோப்பு முறைமையை உருவாக்கிய பிறகு செயல்படுத்தப்படும், ஆனால் அதை படங்களாக பேக்கேஜிங் செய்யும் முன். எதிர்காலத்தில் அதைப் பயன்படுத்துவோம்
  • linux.config - கர்னல் கட்டமைப்பு
  • rootfs_overlay - இலக்கு கோப்பு முறைமையின் மேல் மேலடுக்கு அடைவு
  • user.txt - உருவாக்கப்படும் பயனர்களை விவரிக்கும் கோப்பு

அடைவு உள்ளமைவுகளைப் எங்கள் பலகைகளின் defconfig உள்ளது. எங்களிடம் ஒன்று மட்டுமே உள்ளது.

தொகுப்பு - எங்கள் தொகுப்புகளுடன் பட்டியல். ஆரம்பத்தில், பில்ட்ரூட்டில் குறிப்பிட்ட எண்ணிக்கையிலான தொகுப்புகளை உருவாக்குவதற்கான விளக்கங்கள் மற்றும் விதிகள் உள்ளன. பின்னர் icewm window manager மற்றும் Slim graphical login manager ஐ இங்கு சேர்ப்போம்.
திட்டுகள் - வெவ்வேறு தொகுப்புகளுக்கு உங்கள் இணைப்புகளை வசதியாக சேமிக்க உங்களை அனுமதிக்கிறது. மேலும் விவரங்கள் கீழே ஒரு தனி பிரிவில்.
இப்போது நமது வெளிப்புற மரத்திற்கான விளக்கக் கோப்புகளைச் சேர்க்க வேண்டும். இதற்கு 3 கோப்புகள் பொறுப்பு: external.desc, Config.in, external.mk.

வெளிப்புற.desc உண்மையான விளக்கம் உள்ளது:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

முதல் வரியே தலைப்பு. எதிர்கால பில்ட்ரூட் ஒரு மாறியை உருவாக்கவும் $(BR2_EXTERNAL_MY_TREE_PATH), இது சட்டசபையை கட்டமைக்கும் போது பயன்படுத்தப்பட வேண்டும். எடுத்துக்காட்டாக, பயனர் கோப்பிற்கான பாதையை பின்வருமாறு அமைக்கலாம்:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

இரண்டாவது வரி ஒரு சிறிய, மனிதனால் படிக்கக்கூடிய விளக்கமாகும்.

config.in, external.mk — சேர்க்கப்பட்ட தொகுப்புகளை விவரிக்க கோப்புகள். உங்கள் சொந்த தொகுப்புகளை நீங்கள் சேர்க்கவில்லை என்றால், இந்தக் கோப்புகளை காலியாக விடலாம். இப்போதைக்கு அதைத்தான் செய்வோம்.
இப்போது எங்களின் வெளிப்புற-மரம் தயாராக உள்ளது, அதில் எங்கள் போர்டின் defconfig மற்றும் அதற்குத் தேவையான கோப்புகள் உள்ளன. பில்ட்ரூட் கோப்பகத்திற்குச் சென்று வெளிப்புற மரத்தைப் பயன்படுத்தக் குறிப்பிடுவோம்:

[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 menuconfig

முதல் கட்டளையில் நாம் வாதத்தைப் பயன்படுத்துகிறோம் BR2_EXTERNAL=../my_tree/, ஒரு வெளிப்புற மரத்தின் பயன்பாட்டைக் குறிக்கிறது. ஒரே நேரத்தில் பயன்படுத்த பல வெளிப்புற மரங்களை நீங்கள் குறிப்பிடலாம். இந்த விஷயத்தில், நீங்கள் இதை ஒரு முறை மட்டுமே செய்ய வேண்டும், அதன் பிறகு ஒரு கோப்பு வெளியீடு/.br-external.mk உருவாக்கப்பட்டது பயன்படுத்தப்படும் வெளிப்புற மரத்தைப் பற்றிய தகவல்களைச் சேமிக்கிறது:

[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 article

முக்கியமான! இந்த கோப்பில் உள்ள பாதைகள் முழுமையானதாக இருக்கும்!

மெனுவில் வெளிப்புற விருப்பங்கள் உருப்படி தோன்றியுள்ளது:

பில்ட்ரூட் - பகுதி 2. உங்கள் பலகை உள்ளமைவை உருவாக்குதல்; வெளிப்புற மரத்தைப் பயன்படுத்துதல், ரூட்ஃப்ஸ்-மேலடுக்கு, பிந்தைய உருவாக்க ஸ்கிரிப்ட்கள்

இந்த துணைமெனுவில் எங்களின் வெளிப்புற மரத்திலிருந்து தொகுப்புகள் இருக்கும். இந்தப் பகுதி தற்போது காலியாக உள்ளது.

வெளிப்புற மரத்தைப் பயன்படுத்த தேவையான பாதைகளை மீண்டும் எழுதுவது இப்போது எங்களுக்கு மிகவும் முக்கியமானது.

Build விருப்பங்கள் → Location to save buildroot config பிரிவில், சேமிக்கப்பட்ட defconfigக்கு ஒரு முழுமையான பாதை இருக்கும் என்பதை நினைவில் கொள்ளவும். extgernal_tree இன் பயன்பாட்டைக் குறிப்பிடும் தருணத்தில் இது உருவாக்கப்பட்டது.

கணினி உள்ளமைவுப் பிரிவில் உள்ள பாதைகளையும் சரிசெய்வோம். உருவாக்கப்பட்ட பயனர்களைக் கொண்ட அட்டவணைக்கு:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

கர்னல் பிரிவில், கர்னல் உள்ளமைவுக்கு பாதையை மாற்றவும்:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

இப்போது எங்கள் வெளிப்புற மரத்திலிருந்து எங்கள் கோப்புகள் சட்டசபையின் போது பயன்படுத்தப்படும். வேறொரு கோப்பகத்திற்குச் செல்லும்போது அல்லது பில்ட்ரூட்டைப் புதுப்பிக்கும்போது, ​​எங்களுக்கு குறைந்தபட்ச சிக்கல்கள் இருக்கும்.

ரூட் எஃப்எஸ் மேலடுக்கைச் சேர்த்தல்:

இலக்கு கோப்பு முறைமையில் கோப்புகளை எளிதாக சேர்க்க/மாற்றுவதற்கு இந்த வழிமுறை உங்களை அனுமதிக்கிறது.
கோப்பு ரூட் fs மேலடுக்கில் இருந்தால், ஆனால் இலக்கில் இல்லை என்றால், அது சேர்க்கப்படும்
கோப்பு ரூட் fs மேலடுக்கில் மற்றும் இலக்கில் இருந்தால், அது மாற்றப்படும்.
முதலில், ரூட் fs மேலடுக்கு dirக்கான பாதையை அமைப்போம். இது கணினி கட்டமைப்பு → ரூட் கோப்பு முறைமை மேலடுக்கு கோப்பகங்கள் பிரிவில் செய்யப்படுகிறது:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

இப்போது இரண்டு கோப்புகளை உருவாக்குவோம்.

[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 overlay

முதல் கோப்பு (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) முடிக்கப்பட்ட கணினியில் /etc/hosts கோப்பை மாற்றும். இரண்டாவது கோப்பு (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) சேர்க்கப்படும்.

நாங்கள் சேகரித்து சரிபார்க்கிறோம்:

பில்ட்ரூட் - பகுதி 2. உங்கள் பலகை உள்ளமைவை உருவாக்குதல்; வெளிப்புற மரத்தைப் பயன்படுத்துதல், ரூட்ஃப்ஸ்-மேலடுக்கு, பிந்தைய உருவாக்க ஸ்கிரிப்ட்கள்

கணினி சட்டசபையின் வெவ்வேறு நிலைகளில் தனிப்பயனாக்குதல் ஸ்கிரிப்ட்களை செயல்படுத்துதல்

படங்களாக தொகுக்கப்படுவதற்கு முன், இலக்கு கோப்பு முறைமைக்குள் நீங்கள் சில வேலைகளைச் செய்ய வேண்டும்.

கணினி உள்ளமைவு பிரிவில் இதைச் செய்யலாம்:

பில்ட்ரூட் - பகுதி 2. உங்கள் பலகை உள்ளமைவை உருவாக்குதல்; வெளிப்புற மரத்தைப் பயன்படுத்துதல், ரூட்ஃப்ஸ்-மேலடுக்கு, பிந்தைய உருவாக்க ஸ்கிரிப்ட்கள்

இலக்கு கோப்பு முறைமை உருவாக்கப்பட்ட பிறகு முதல் இரண்டு ஸ்கிரிப்ட்கள் செயல்படுத்தப்படும், ஆனால் அது படங்களாக தொகுக்கப்படுவதற்கு முன்பு. வித்தியாசம் என்னவென்றால், ஃபேக்கரூட் ஸ்கிரிப்ட் ஃபேக்கரூட்டின் சூழலில் செயல்படுத்தப்படுகிறது, இது ரூட் பயனராக வேலையை உருவகப்படுத்துகிறது.

கணினி படங்கள் உருவாக்கப்பட்ட பிறகு கடைசி ஸ்கிரிப்ட் செயல்படுத்தப்படுகிறது. நீங்கள் அதில் கூடுதல் செயல்களைச் செய்யலாம், எடுத்துக்காட்டாக, தேவையான கோப்புகளை NFS சேவையகத்திற்கு நகலெடுக்கவும் அல்லது உங்கள் சாதன நிலைபொருளின் படத்தை உருவாக்கவும்.

உதாரணமாக, நான் ஒரு ஸ்கிரிப்டை உருவாக்குவேன், அது பதிப்பை எழுதும் மற்றும் /etc/ க்கு தேதியை உருவாக்குகிறது.
முதலில் இந்த கோப்பிற்கான பாதையை எனது வெளிப்புற மரத்தில் குறிப்பிடுகிறேன்:

பில்ட்ரூட் - பகுதி 2. உங்கள் பலகை உள்ளமைவை உருவாக்குதல்; வெளிப்புற மரத்தைப் பயன்படுத்துதல், ரூட்ஃப்ஸ்-மேலடுக்கு, பிந்தைய உருவாக்க ஸ்கிரிப்ட்கள்

இப்போது ஸ்கிரிப்ட் தானே:

[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-release

சட்டசபைக்குப் பிறகு, இந்த கோப்பை கணினியில் காணலாம்.

நடைமுறையில், ஸ்கிரிப்ட் பெரியதாக இருக்கலாம். எனவே, உண்மையான திட்டத்தில் நான் மிகவும் மேம்பட்ட பாதையை எடுத்தேன்:

  1. நான் ஒரு கோப்பகத்தை (my_tree/board_my_x86_board/inside_fakeroot_scripts) உருவாக்கியுள்ளேன், அதில் வரிசை எண்கள் கொண்ட ஸ்கிரிப்ட்களை இயக்க வேண்டும். எடுத்துக்காட்டாக, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. நான் ஒரு ஸ்கிரிப்டை (my_tree/board_my_x86_board/run_inside_fakeroot.sh) எழுதினேன், அது இந்தக் கோப்பகத்தின் வழியாகச் சென்று அதில் உள்ள ஸ்கிரிப்ட்களை தொடர்ச்சியாக இயக்குகிறது.
  3. இந்த ஸ்கிரிப்டை, சிஸ்டம் உள்ளமைவில் உள்ள போர்டு அமைப்புகளில் குறிப்பிடப்பட்டுள்ளது -> தனிப்பயன் ஸ்கிரிப்டுகள் ஃபேக்கரூட் சூழலில் ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) பிரிவில் இயங்க வேண்டும்

ஆதாரம்: www.habr.com

கருத்தைச் சேர்