লিনাক্স কার্নেল বিল্ড কনফিগারেশনটি স্বয়ংক্রিয় করতে মেনুকনফিগকে স্ক্রিপ্ট কিভাবে করবেন?


10

আমি লিনাক্স বিল্ড স্বয়ংক্রিয় কিন্তু শেষ পর্যন্ত একটি বিন্দু যেখানে আমি চালানোর জন্য কি একটি খুব ম্যানুয়াল পদক্ষেপ হবে বলে মনে হয় প্রয়োজন পেতে চাই: make menuconfig। এটি ওএস এবং কার্নেল কনফিগারেশনের মধ্যে কনফিগারেশনের সিঙ্ক্রোনাইজ করা বলে মনে হচ্ছে?

cp git-tracked-config .config
make defconfig 
make menuconfig # <- how to automate/script this?
make V=s

মূলত, আমি কীভাবে make menuconfigএকটি বিল্ড স্ক্রিপ্টের কলটি সরিয়ে ফেলতে পারি ?

অন্যদিকে, এটি এমন একটি বিল্ড ত্রুটির প্রতিক্রিয়া হিসাবে ঘটেছিল যা মনে হয় যখন আমি কখনই মেনুকোনফিগকে কল না করে দৌড়ে যাই:

make[1]: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'.  Stop.

যা মনে হয় কোনও মেকফিলের অনুপস্থিত নিয়ম রয়েছে কারণ সম্ভবত মেকফাইল নিজেই নেই বা মেকফাইলটি সেই নিয়মটি ধারণ করার জন্য তৈরি করা / মর্ফড তৈরি করা হয়নি তবে এটি একটি পৃথক প্রশ্ন।

এটি সম্পূর্ণরূপে যোগাযোগ করার একটি স্মার্ট উপায় হতে পারে। অন্য কোন কনফিগারেশন রয়েছে যা আমি ট্র্যাক করছি না তবে হওয়া উচিত (যেমন ওল্ডকনফিগ)?


1
আপনি পরীক্ষা করেছেন make olddefconfig?
jimmij

না, এখন সে সম্পর্কে আরও পড়ুন ... এটি কেবল এতটাই বেদনাদায়ক কারণ কোনও ছোট পরীক্ষাটি এত দীর্ঘ সময় নেয়।
তারাবিতে

উত্তর:


8

লিনাক্স কার্নেল বিল্ড-সিস্টেম অনেকগুলি বিল্ড টার্গেট সরবরাহ করে, এটি সম্পর্কে জানার সর্বোত্তম উপায় সম্ভবত এটি করা make help:

Configuration targets:
  config      - Update current config utilising a line-oriented program
  nconfig         - Update current config utilising a ncurses menu based program
  menuconfig      - Update current config utilising a menu based program
  xconfig     - Update current config utilising a QT based front-end
  gconfig     - Update current config utilising a GTK based front-end
  oldconfig   - Update current config utilising a provided .config as base
  localmodconfig  - Update current config disabling modules not loaded
  localyesconfig  - Update current config converting local mods to core
  silentoldconfig - Same as oldconfig, but quietly, additionally update deps
  defconfig   - New config with default from ARCH supplied defconfig
  savedefconfig   - Save current config as ./defconfig (minimal config)
  allnoconfig     - New config where all options are answered with no
  allyesconfig    - New config where all options are accepted with yes
  allmodconfig    - New config selecting modules when possible
  alldefconfig    - New config with all symbols set to default
  randconfig      - New config with random answer to all options
  listnewconfig   - List new options
  olddefconfig    - Same as silentoldconfig but sets new symbols to their default value
  kvmconfig   - Enable additional options for guest kernel support
  tinyconfig      - Configure the tiniest possible kernel

জিম্মিজ মন্তব্যগুলিতে যেমন বলেছেন, আকর্ষণীয় অংশগুলি oldconfigসম্পর্কিত লক্ষ্যে রয়েছে।

ব্যক্তিগতভাবে, আমি আপনাকে যাবার জন্য সুপারিশ করব silentoldconfig(যদি .configফাইলটিতে কোনও পরিবর্তন হয় না বা olddefconfigআপনি যদি .configনতুন কার্নেল দিয়ে নিজের ফাইল আপডেট করেন তবে ।


1
randconfigআমাকে অবাক করেছে. সম্ভবত সম্ভাব্য সংমিশ্রণগুলি তৈরি করে বিল্ডগুলি পরীক্ষা করতে ব্যবহৃত হয়?
কনসার্চ

2
হ্যাঁ, এটি কনফিগারেশন ফাইলের জন্য একটি স্পষ্টরূপে ব্যবহৃত হয়েছে। এই প্রশ্নটি দেখুন: লিনাক্স কার্নেল সংকলন করার সময়, এর উদ্দেশ্য কী make randconfig? ('জিজ্ঞাসা উবুন্টু' ওয়েবসাইটে)।
আতঙ্ক

2

merge_config.sh কনফিগার টুকরা

$ cd linux
$ git checkout v4.9
$ make x86_64_defconfig
$ grep -E 'CONFIG_(DEBUG_INFO|GDB_SCRIPTS)[= ]' .config
# CONFIG_DEBUG_INFO is not set
$ # GDB_SCRIPTS depends on CONFIG_DEBUG_INFO in lib/Kconfig.debug.
$ cat <<EOF >.config-fragment
> CONFIG_DEBUG_INFO=y
> CONFIG_GDB_SCRIPTS=y
> EOF
$ # Order is important here. Must be first base config, then fragment.
$ ./scripts/kconfig/merge_config.sh .config .config-fragment
$ grep -E 'CONFIG_(DEBUG_INFO|GDB_SCRIPTS)[= ]' .config
CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y

প্রক্রিয়া প্রতিস্থাপন দুর্ভাগ্যজনকভাবে কাজ করে না :

./scripts/kconfig/merge_config.sh arch/x86/configs/x86_64_defconfig \
    <( printf 'CONFIG_DEBUG_INFO=y\nCONFIG_GDB_SCRIPTS=y\n' ) 

কারণ: https://unix.stackexchange.com/a/164109/32558

merge_config.shmake alldefconfigলক্ষ্যটির জন্য একটি সহজ ফ্রন্ট-এন্ড ।

ক্রস সংকলন করার সময়, ARCHচালানোর সময় অবশ্যই রফতানি করতে হবে merge_config.sh, যেমন:

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make defconfig
./scripts/kconfig/merge_config.sh .config .config-fragment

মার্জ হওয়া আউটপুট ফাইলটি KCONFIG_CONFIGপরিবেশের ভেরিয়েবলের সাথে স্পষ্টভাবে নির্দিষ্ট করা যেতে পারে ; অন্যথায় এটি কেবল ওভাররাইট করে .config:

KCONFIG_CONFIG=some/path/.config ./scripts/kconfig/merge_config.sh .config .config-fragment

বিল্ড্রুট এটির সাথে এটি স্বয়ংক্রিয়ভাবে ব্যবহার করে BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES: /programming/1414968/how-do-i-configure-the-linux-kernel-within-buildroot

সম্পর্কিত: /programming/7505164/how-do-you-non-interactively-turn-on-features-in-a-linux-kernel-config-file


0

আমি আমার সেন্টোস কার্নেলটি আপগ্রেড করতে চেয়েছিলাম এবং এটি বেশ কয়েকটি মেশিনে করার দরকার ছিল বলে আমার একই সমস্যা ছিল। ধরে নিন এখানে আমার নতুন সেন্টোস কার্নেল গাছটি /linux-5.1 এ রয়েছে (আমি মূল অ্যাকাউন্টে লগইন করছি)

  1. cd /linux-5.1
  2. চালান make menuconfigএবং আপনার পরিবর্তনগুলি করুন এবং এগুলিকে সংরক্ষণ করুন.config
  3. /linux-5.1/.configআপনার বিকাশ সার্ভারে ফাইলটি অনুলিপি করুন
  4. এখন আপনার পরবর্তী মেশিনটির আপগ্রেড করার জন্য আপনি .configফাইলটি আপনার বিকাশ সার্ভার থেকে /linux-5.1/.configনতুন মেশিনে অনুলিপি করতে পারবেন ।

আশা করি এটি একই অবস্থাতে কাউকে সহায়তা করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.