బిల్డ్‌రూట్ - పార్ట్ 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 - సృష్టించబడే వినియోగదారులను వివరించే ఫైల్

డైరెక్టరీ configs మా బోర్డుల defconfig కలిగి ఉంది. మన దగ్గర ఒకటి మాత్రమే ఉంది.

ప్యాకేజీ - మా ప్యాకేజీలతో జాబితా. ప్రారంభంలో, బిల్డ్‌రూట్ పరిమిత సంఖ్యలో ప్యాకేజీలను రూపొందించడానికి వివరణలు మరియు నియమాలను కలిగి ఉంటుంది. తరువాత మేము ఇక్కడ icewm విండో మేనేజర్ మరియు స్లిమ్ గ్రాఫికల్ లాగిన్ మేనేజర్‌ని జోడిస్తాము.
పొగమంచు — విభిన్న ప్యాకేజీల కోసం మీ ప్యాచ్‌లను సౌకర్యవంతంగా నిల్వ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. దిగువ ప్రత్యేక విభాగంలో మరిన్ని వివరాలు.
ఇప్పుడు మనం మన బాహ్య-వృక్షం కోసం వివరణ ఫైల్‌లను జోడించాలి. దీనికి 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. మీ బోర్డు కాన్ఫిగరేషన్‌ని సృష్టించడం; బాహ్య చెట్టు, రూట్‌ఫ్స్-ఓవర్‌లే, పోస్ట్-బిల్డ్ స్క్రిప్ట్‌లను ఉపయోగించడం

ఈ ఉపమెనూ మా బాహ్య-వృక్షం నుండి మా ప్యాకేజీలను కలిగి ఉంటుంది. ఈ విభాగం ప్రస్తుతం ఖాళీగా ఉంది.

ఇప్పుడు బాహ్య-వృక్షాన్ని ఉపయోగించడానికి అవసరమైన మార్గాలను తిరిగి వ్రాయడం మాకు చాలా ముఖ్యం.

బిల్డ్‌రూట్ కాన్ఫిగర్ విభాగంలో సేవ్ చేయడానికి బిల్డ్ ఎంపికలు → లొకేషన్‌లో, సేవ్ చేయబడిన 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 ఓవర్‌లేలో మరియు లక్ష్యంలో ఉంటే, అది భర్తీ చేయబడుతుంది.
ముందుగా, రూట్ 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

ఒక వ్యాఖ్యను జోడించండి