कर्नेल .config आवश्यक विकल्प


16

मैं पाई के लिए एक कस्टम कर्नेल को संकलित करने में रुचि रखता हूं। मेरे पास github संग्रह से स्रोत है , जिसमें एक डिफ़ॉल्ट कॉन्फ़िगरेशन के लिए एक लक्ष्य शामिल है:

make ARCH=arm bcmrpi_defconfig

लेकिन (सामान्य लिनेक्स डिस्ट्रो कर्नेल के साथ) इसमें बहुत सारे सामान शामिल हैं जिनकी मुझे कभी आवश्यकता नहीं होगी, और कुछ चीजें जो मैं बदलना चाहूंगा।

वास्तव में विभिन्न सामान्य पाई-केंद्रित चीजों को काम करने के लिए कौन से विकल्प आवश्यक हैं?

जवाबों:


25

डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ शुरू करना, या एक जिसे आप जानते हैं कि पहले से ही काम करता है, एक अच्छा विचार है। पाई 2 के लिए सावधान रहें , आपको उपयोग करना चाहिए:

make bcm2709_defconfig

के बजाय bcmrpi_defconfig

ध्यान दें कि यदि आप एक ही संस्करण के मौजूदा कर्नेल अधिष्ठापन को रोकने से बचना चाहते हैं, तो सामान्य सेटअप -> स्थानीय संस्करण सेट करें - कर्नेल रिलीज़ स्ट्रिंग को एक अद्वितीय मूल्य पर जोड़ें।

मैंने .configयहां से वास्तविक लेबल का उपयोग किया है, संस CONFIG_ ; यदि आप उदाहरण के लिए उपयोग कर रहे हैं make menuconfig, तो आप खोज के साथ प्रासंगिक विकल्प पा सकते हैं (फ़ॉरवर्ड स्लैश /)। ये लेबल प्रत्येक विकल्प के लिए "सहायता" पृष्ठ के शीर्ष पर भी उपयोग किया जाता है। ध्यान दें कि शब्द सक्षम (d) एक ऐसी चीज को संदर्भित करता है जिसके कारण एक विकल्प दिखाई देता है, वास्तव में निर्मित किए जाने वाले विकल्प का चयन करने से अलग ।

जहां ए / बी / बी + / ए + बोर्ड और पाई 2 के बीच अंतर हैं, यह संकेत दिया गया है। कुछ स्थानों पर यह ब्रॉडकॉम 2708 और 2709 परिवारों के बीच का अंतर है, लेकिन अन्य स्थानों में, पीआई 2 अन्य बोर्डों के समान 2708 (या 2835) विकल्प का उपयोग करता है।


प्रणाली

ए / ए + / बी / बी + के लिए:

  • ARCH_BCM2708 (सिस्टम प्रकार -> आर्म सिस्टम प्रकार -> ब्रॉडकॉम BCM2708 परिवार)

पाई 2 के लिए:

  • ARCH_BCM2709 (सिस्टम प्रकार -> आर्म सिस्टम प्रकार -> ब्रॉडकॉम BCM2709 परिवार) ... यह सूची के बहुत नीचे है और वर्णमाला क्रम में नहीं है।
  • एसएमपी (कर्नेल सुविधाएँ -> सममित बहु-प्रसंस्करण)
  • नियॉन (फ्लोटिंग पॉइंट एमुलेशन -> एडवांस्ड SIMD (नियॉन) एक्सटेंशन सपोर्ट) और "कर्नेल मोड में NEON के लिए सपोर्ट"।

कर्नेल मेमोरी स्प्लिट:

विरासत सॉफ़्टवेयर के कुछ टुकड़ों की समस्याओं के कारण , डिफ़ॉल्ट कॉन्फ़िगर 3 जी / 1 जी का उपयोग कर सकता है जो कि पी 2 2 के रैम का 25% उपयोगकर्ता स्थान के लिए अनुपलब्ध छोड़ देगा। यदि आप इस बारे में चिंतित हैं, तो कर्नेल विशेषताएँ -> मेमोरी स्प्लिट की जाँच करें ।


एसडी कार्ड

ये मॉड्यूल नहीं हो सकते हैं, जाहिर है, क्योंकि उन्हें उपयोग करने की आवश्यकता होती है /lib/modules; उन्हें बिल्ट-इन होना चाहिए। वे menuconfig के "डिवाइस ड्राइवर" अनुभाग में हैं।

  • MMC (MMC / SD / SDIO कार्ड सपोर्ट): mmc ड्राइवर के लिए विकल्प प्राप्त करना आवश्यक है, लेकिन पर्याप्त नहीं। उन विकल्पों के भीतर:
    • MMC_BCM2835 ( BCM2835 पर MMC समर्थन)।
    • MMC_BCM2835_DMA (BCM2835 Arasan नियंत्रक पर DMA समर्थन): MMC_BCM2835 द्वारा चयनित लेकिन सक्षम नहीं।
    • MMC_SDHCI (सुरक्षित डिजिटल होस्ट नियंत्रक इंटरफ़ेस समर्थन)

चूंकि मूल विभाजन आमतौर पर स्वरूपित होता है, आप यह भी चाहते हैं कि इसमें निर्मित:

  • "फाइल सिस्टम" के तहत EXT4_FS (विस्तारित 4 (ext4) फाइल सिस्टम)। शायद ext2 और ext3 भी एक अच्छा विचार है।

बूट विभाजन vfat है, इसलिए:

  • VFAT_FS (VFAT (Windows-95) fs सपोर्ट) "फाइल सिस्टम -> डॉस / एफएटी / एनटी फाइलसिस्टम" के अंतर्गत है।

विविध

ये आपकी (लगभग निश्चित रूप से) ज़रूरत की विभिन्न चीजें हैं, इसलिए मैंने उन्हें पहले सूचीबद्ध किया है।

  • "फ्लोटिंग पॉइंट एमुलेशन" के तहत वीएफपी (वीएफपी-फॉर्मेट फ्लोटिंग पॉइंट मैथ्स)।
  • UNIX (यूनिक्स डोमेन सॉकेट्स) "नेटवर्किंग सपोर्ट" के तहत। यदि आप कोई वास्तविक नेटवर्किंग नहीं कर रहे हैं तो भी बेसिक सिस्टम सॉफ्टवेयर को इसकी आवश्यकता होगी।
  • BINFMT_ELF ("यूजरस्पेस बाइनरी फार्मेट" के तहत ईएलएफ बायनेरिज़ के लिए कर्नेल समर्थन)।
  • TTY "डिवाइस ड्राइवर -> चरित्र डिवाइस" के तहत TTY सक्षम करें); यह VT (वर्चुअल टर्मिनल) और UNIX98_PTYS (Unix98 PTY समर्थन) को सक्षम करता है जिसे आपको चुनना चाहिए। VT तब VT_CONSOLE (वर्चुअल टर्मिनल पर कंसोल के लिए समर्थन) और CONSOLE_TRANSLATIONS (कंसोल में वर्ण अनुवाद सक्षम करें ) को सक्षम करता है जिसे भी चुना जाना चाहिए।
  • PROC_FS , SYSFS और TMPFS "फाइल सिस्टम -> छद्म फाइलसिस्टम" के तहत।
  • SERIAL_AMBA_PL011 (ARM AMBA PL011 सीरियल पोर्ट सपोर्ट) "डिवाइस ड्राइवर्स -> कैरेक्टर डिवाइसेस -> सीरियल ड्राइवर्स" और SERIAL_AMBA_PL011_CONSOLE (AMBA सीरियल पोर्ट पर कंसोल के लिए सपोर्ट) के तहत । रास्पियन सिस्टम इसके बिना "/ dev / ttyAMA0: ऐसी कोई फ़ाइल या निर्देशिका" के बारे में शिकायत करेंगे।
  • MAILBOX और BCM2708_MBOX (4.x कर्नेल पर)। यह डिवाइस ड्राइवर है-> सबमेनू में मेलबॉक्स हार्डवेयर सपोर्ट और बीसीएम 2708 विकल्प। देखें zub का जवाब

यु एस बी

  • USB, (डिवाइस-होस्ट USB के लिए समर्थन), "डिवाइस ड्राइवर -> USB समर्थन" में, पृष्ठ के नीचे USB_DWCOTG (Synopsis DWC होस्ट समर्थन) को सक्षम करना, जिसे भी चुना जाना चाहिए।
  • USB_ANNOUNCE_NEW_DEVICES (डिवाइस ड्राइवर -> USB समर्थन -> USB नए उपकरणों की घोषणा करता है)।
  • USB_DEFAULT_PERSIST (डिवाइस ड्राइवर -> USB समर्थन -> डिफ़ॉल्ट रूप से USB सक्षम रखें)।

कीबोर्ड और चूहों के लिए:

  • HID_GENERIC (जेनेरिक HID ड्राइवर) "डिवाइस ड्राइवर-> HID समर्थन" में
  • फिर "USB HID सपोर्ट" में: USB_HID (USB HID ट्रांसपोर्ट लेयर)
  • INPUT_MOUSEDEV (माउस इंटरफ़ेस) "डिवाइस ड्राइवर्स -> इनपुट डिवाइस सपोर्ट" में।

हार्ड ड्राइव के लिए:

  • SCSI (SCSI डिवाइस सपोर्ट) और फिर BLK_DEV_SD (SCSI डिस्क सपोर्ट) "डिवाइस ड्राइवर्स -> SCSI डिवाइस" में।
  • "डिवाइस ड्राइवर्स -> यूएसबी सपोर्ट" में USB_STORAGE (USB मास स्टोरेज सपोर्ट)।

एंड्रॉइड डिवाइस को टेदर करने के लिए, यहां मेरा जवाब देखें ।


ईथरनेट

USB पहले सक्षम होना चाहिए।

  • नेट (नेटवर्किंग समर्थन), एक शीर्ष स्तर का विकल्प; अंदर हैं कि:

    • पैकेट (पैकेट सॉकेट)।
    • INET (टीसीपी / आईपी नेटवर्किंग)। यह विभिन्न प्रकार के IP संबंधित डिफॉल्ट को सक्षम कर सकता है जिन्हें आप छोड़ सकते हैं।
    • नेटफिल्टर (नेटवर्क पैकेट फ़िल्टरिंग फ्रेमवर्क), कर्नेल "आईपी टेबल" पैकेट फिल्टर फ़ायरवॉल के लिए आवश्यक है।
  • NETDEVICES (नेटवर्क डिवाइस सपोर्ट) "डिवाइस ड्राइवर्स" में, तब:

    • NET_CORE (नेटवर्क कोर ड्राइवर समर्थन)।
    • USB_NET_DRIVERS (USB नेटवर्क एडेप्टर) ->
      • USB_USBNET (बहुउद्देश्यीय USB नेटवर्किंग फ्रेमवर्क)।
      • USB_NET_SMSC95XX (SMSC LAN95XX आधारित USB 2.0 10/100 ईथरनेट उपकरण)

ध्वनि

ऑनबोर्ड ध्वनि सक्षम करने के लिए:

  • SOUND (डिवाइस ड्राइवर्स में), तब:
    • SND (उन्नत लिनक्स साउंड आर्किटेक्चर) और उस में:
    • SND_ARM (ARM साउंड डिवाइस) और आखिरकार SND_BCM2835 (BCM2835 ALSA ड्राइवर)

वीडियो

  • CONFIG_BCM2708_VCHIQ (डिवाइस ड्राइवर -> विविध उपकरण -> वीडियोकोर VCHIQ)।

X सर्वर समर्थन के लिए आगे कुछ भी आवश्यक नहीं है; पाई के SoC के लिए कोई DRI ड्राइवर विकल्प नहीं हैं।

यदि आप फ्रेमबफ़र का उपयोग करना चाहते हैं, जो एक्स के बाहर ग्राफिक्स को प्रदर्शित करने fbiऔर omxplayerप्रदर्शित करने की अनुमति देता है :

  • FB (डिवाइस ड्राइवर -> ग्राफिक्स सपोर्ट -> फ्रेम बफर डिवाइसेस -> फ्रेम बफर डिवाइसेस के लिए सपोर्ट), फिर उसी मेनू में FB_BCM2708 (BCM2708 फ्रेमबर्फर सपोर्ट)।

यदि आप ऐसा करते हैं और आप बूट कंसोल पर पेंगुइन (या बल्कि रास्पबेरी) चाहते हैं, तो ग्राफिक्स सपोर्ट के तहत लोगो (बूटअप लोगो) याद रखें ।

आप सिस्टम प्रकार -> ब्रॉडकॉम 2708 (या 9) कार्यान्वयन के तहत विकल्पों को देखना चाह सकते हैं ।


GPIO / I 2 C

  • BCM2708_GPIO (सिस्टम प्रकार -> ब्रॉडकॉम BCM2708 कार्यान्वयन) या Pi 2 के लिए, संबंधित BCM2709 विकल्प।
  • इंटरफ़ेस के लिए GPIO_SYSFS (डिवाइस ड्राइवर -> GPIO समर्थन) /sys/class/gpio
  • I2C (डिवाइस ड्राइवर -> I2C समर्थन), जो I2C_CHARDEV (I2C डिवाइस इंटरफ़ेस) को सक्षम करता है । फिर "I2C हार्डवेयर बस समर्थन" के तहत:
    • I2C_BCM2708 (BCM2708 BSC)।

Raspicam

  • MEDIA_CAMERA_SUPPORT (डिवाइस ड्राइवर -> मल्टीमीडिया समर्थन -> कैमरा / वीडियो खींचने वाले समर्थन)।
  • V4L_PLATFORM_DRIVERS (डिवाइस ड्राइवर-> मल्टीमीडिया समर्थन -> V4L प्लेटफ़ॉर्म डिवाइसेस ")। यह एक सबमेनू को सक्षम करता है जहाँ आप चयन करना चाहते हैं:
    • CONFIG_SOC_CAMERA (SoC कैमरा सपोर्ट)।
    • CONFIG_VIDEO_BCM2835 (ब्रॉडकॉम BCM2835 कैमरा इंटरफ़ेस ड्राइवर)। यह "ब्रॉडकॉम BM2835 MMAL कैमरा इंटरफ़ेस ड्राइवर ( CONFIG_VIDEO_BCM2835_MMAL ) को सक्षम करता है जिसे आपको भी चुनना चाहिए।

थर्मल सेंसर

आपके पास यहां एक विकल्प है; यदि आप दोनों को चुनने की कोशिश करते हैं, तो पहले वाले को रद्द कर दिया जाएगा (हालांकि आप एक मॉड्यूल के रूप में निर्माण कर सकते हैं, कॉन्फ़िगरेशन बदल सकते हैं, दूसरे का निर्माण कर सकते हैं और यदि आप वास्तव में चाहते हैं, तो उन दोनों का उपयोग करें)।

  • SENSORS_BCM2835 (डिवाइस ड्राइवर- > हार्डवेयर मॉनिटरिंग सपोर्ट-> ब्रॉडकॉम BCM2835 HWMON ड्राइवर)। यदि आप नीचे "BCM2835 थर्मल ड्राइवर" का चयन नहीं करते हैं तो यह सूची में सबसे नीचे है। यह आपको थर्मल सामान तक पहुंच देता है /sys/devices/platform/bcm2835_hwmon- temp1_inputऔर temp1_max। पूर्व वही है /sys/devices/virtual/thermal/thermal_zone0/temp; उत्तरार्द्ध हमेशा 85000 (यानी 85 ° C) होता है।
  • THERMAL_BCM2835 (डिवाइस ड्राइवर- > सामान्य थर्मल sysfs ड्राइवर-> BCM2835 थर्मल ड्राइवर)। डिवाइस ड्राइवर्स-> हार्डवेयर मॉनिटरिंग सपोर्ट (लेकिन उस मेन्यू में इंडिविजुअल ड्राइवर नहीं) चुनें, ताकि "थर्मल सेंसर को hwmon डिवाइस के रूप में एक्सपोज़ करें" यहां दिखाई दे और आप चुन सकें (4.0.y लगता है कि यह नहीं है)। इसे चुनना, SENSORS_BCM2835, को ऊपर से अनचेक करेगा। यह आपको याद रखने और खोजने में आसान बनाता है /sys/class/devices/virtual/thermal/thermal_zone0जिसमें शामिल है tempऔर trip_point_0_temp(जैसा कि temp1_maxऊपर, वैसा ही )। विभिन्न यूजरस्पेस मॉनिटर शायद इसे पसंद करेंगे और इसके बिना काम नहीं कर सकते।

5

गोल्डिलॉक की शानदार पोस्ट की एक टिप्पणी:

बस मैं एक चीज़ जोड़ना चाहता हूं जिसे मैं rpi-4.1.y ब्रांच के साथ देखता हूं (05376fce25aaab4f47182a5af04928bfa06f30d6): USB काम करने के लिए (इसमें USB-कनेक्टेड ईथरनेट शामिल है), एक में BCM2708_MBOX (डिवाइस ड्राइवर्स-> मेलबॉक्स हार्डवेयर सपोर्ट भी सक्षम होना चाहिए ) > ब्रॉडकॉम BCM2708 मेलबॉक्स (vcio))।

इस विकल्प के बिना USB आरंभ करना शुरू कर देता है, लेकिन केवल डरावने संदेशों का एक समूह बनाता है जैसे:

[    1.193854] WARN::dwc_otg_core_reset:5109: dwc_otg_core_reset() HANG! Soft Reset GRSTCTL=80000001
[    1.441137] WARN::dwc_otg_hcd_init:1047: FIQ DMA bounce buffers: virt = 0x9fc0c000 dma = 0x5d5e4000 len=9024

Btw। BCM2708_MBOX भी के लिए एक शर्त है THERMAL_BCM2835 और के लिए SND_BCM2835


2

वीडियो (फ्रेमबफ़र)

वीडियो समर्थन के अलावा, ऐसा लगता है कि आपको सक्षम करने की आवश्यकता है:

Device Drivers ->
  DMA Engine support ->
    BCM2835 DMA engine support (CONFIG_DMA_BCM2835)

फ़्रेमबफ़र ड्राइवर को सही ढंग से लोड करने के लिए। आप इसे डीएमए सक्षम किए बिना सक्षम कर सकते हैं, लेकिन यह लोड करने में विफल होगा।

एकीकृत वायरलेस

एकीकृत वायरलेस (आरपीआई 3 और पाई जीरो डब्ल्यू) करने के लिए, आपको निम्नलिखित का चयन करने की आवश्यकता है:

Networking support ->
  Wireless ->
    cfg80211 - wireless configuration API (CONFIG_CFG80211)

Device Drivers ->
  Network device support ->
    Wireless LAN ->
      Broadcom IEEE802.11n embedded FullMAC WLAN driver (CONFIG_BRCMFMAC)

0

पुराना हो सकता है, लेकिन मैं खोज का उपयोग करके यहां आया हूं। SDHC कार्ड के लिए आपको अतिरिक्त आवश्यकता है

Device Drivers -> -> MMC block device driver )CONFIG_MMC_BLOCK)

अन्यथा आपका कर्नेल SDHC कार्ड का पता लगाएगा, लेकिन उस पर कोई विभाजन नहीं होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.