我对为pi编译自定义内核感兴趣。我从github档案库中获取了源代码,其中包括一个默认配置的make目标:

make ARCH=arm bcmrpi_defconfig


但是(与普通的Linux发行版内核一样),它包括很多我将永远不需要的东西,以及一些我想更改的东西。

使各种常见的以pi为中心的东西工作所需的实际选择是什么?

#1 楼

从默认配置开始,或者您已经知道可以使用默认配置,这是一个好主意。请注意,对于Pi 2,应使用:

make bcm2709_defconfig

bcmrpi_defconfig。相同版本的内核安装,将“常规设置”->“本地版本”-“附加到内核发行字符串”设置为唯一值。

我在这里使用了.config的实际标签,没有CONFIG_;如果您使用的是例如make menuconfig,则可以在搜索中找到相关选项(正斜杠/)。这些标签还用于每个选项的“帮助”页面的顶部。请注意,术语enable(d)是指导致出现选项的东西,与实际选择要构建的选项不同。

A / B / B + / A +板之间存在差异和Pi 2,这表明。在某些地方,这是Broadcom 2708和2709系列之间的区别,但在其他地方,Pi 2使用与其他主板相同的2708(或2835)选件。


系统

对于A / A + / B / B +:



ARCH_BCM2708(系统类型->臂系统类型-> Broadcom BCM2708系列)

对于Pi 2:



ARCH_BCM2709(系统类型->臂系统类型-> Broadcom BCM2709系列)...这是最底层的

SMP(内核功能->对称多处理)

NEON(浮点仿真->高级SIMD(Neon)扩展支持) )和“在内核模式下支持NEON”。

内核内存拆分:

由于几款旧软件存在问题,默认配置可能使用3G / 1G在此处将使Pi 2的RAM的25%留给用户空间。如果您对此感到担心,请检查内核功能->内存拆分。


SD卡

显然,这些不是模块,因为访问/lib/modules需要它们;它们必须是内置的。它们在menuconfig的“设备驱动程序”部分中。



MMC(MMC / SD / SDIO卡支持):必须获得mmc驱动程序的选项,但是还不够在这些选项中:



MMC_BCM2835(BCM2835上的MMC支持)。

MMC_BCM2835_DMA(BCM2835 Arasan控制器上的DMA支持):启用但未选择由MMC_BCM2835提供。

MMC_SDHCI(安全数字主机控制器接口支持)



由于根分区通常是ext格式化的,因此您也希望构建该分区在:“文件系统”下的EXT4_FS(Extended 4(ext4)文件系统)中。也许ext2和ext3也是个好主意。

引导分区是vfat,因此:



VFAT_FS(VFAT(Windows-95) fs支持)位于“文件系统-> DOS / FAT / NT文件系统”下。


其他

这些(几乎可以肯定)是您需要的各种东西,因此我首先列出了它们。



VFP(VFP格式的浮点数学)在“浮点仿真”下。

UNIX( Unix域套接字)在“网络支持”下。即使您没有进行任何真正的联网,基本的系统软件也将需要此功能。

“用户空间二进制格式”下的BINFMT_ELF(对ELF二进制文件的内核支持)。

TTY(启用TTY)在“设备驱动程序->字符设备”下;这将启用您应选择的VT(虚拟终端)和UNIX98_PTYS(支持Unix98 PTY)。然后,VT启用VT_CONSOLE(在虚拟终端上支持控制台)和CONSOLE_TRANSLATIONS(在控制台上启用字符转换)。也应选择它们。

PROC_FS,SYSFS和TMPFS在“文件系统->伪文件系统”下。

“设备驱动程序->角色设备->串行驱动程序”和SERIAL_AMBA_PL011_CONSOLE(支持AMBA串行端口上的控制台)下的SERIAL_AMBA_PL011(ARM AMBA PL011串行端口支持)。如果没有此文件,Raspbian系统将抱怨“ / dev / ttyAMA0:没有这样的文件或目录”。

MAILBOX和BCM2708_MBOX(在4.x内核上)。这是设备驱动程序->邮箱硬件支持,以及子菜单中的BCM 2708选项。请参见zub的答案。


USB



USB(支持主机侧USB),在“设备驱动程序-> USB”中支持”,在页面下方启用USB_DWCOTG(摘要DWC主机支持),也应选择该选项。 br /> 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支持”中的USB_STORAGE(USB大容量存储支持)。

有关如何绑定Android设备,请参阅我的回答这里。


以太网

必须首先启用USB。



NET(网络支持),顶级选项;内部是:


PACKET(数据包套接字)。

INET(TCP / IP网络)。这应该启用您可以保留的各种与IP相关的默认值。

NETFILTER(网络数据包过滤框架),对于内核“ ip table”数据包过滤防火墙是必需的。

“设备驱动程序”中的NETDEVICES(网络设备支持),然后:



NET_CORE(网络核心驱动程序支持)。

USB_NET_DRIVERS(USB网络适配器)->



USB_USBNET(多用途USB网络框架)。

USB_NET_SMSC95XX(基于SMSC LAN95XX的USB 2.0 10/100以太网设备)






< br声音

要启用板载声音:



声音(在设备驱动程序中),然后:



SND(高级Linux声音体系结构),其中:

SND_ARM(ARM声音设备),最后是SND_BCM2835(BCM2835 ALSA驱动程序)




视频



CONFIG_BCM2708_VCHIQ(设备驱动程序->其他设备-> Videocore VCHIQ)。

X服务器支持不再需要; pi的SoC没有DRI驱动程序选项。

如果要使用帧缓冲区,则允许fbiomxplayer之类的应用程序在X之外显示图形:



FB(设备驱动程序->图形支持->帧缓冲设备->支持帧缓冲设备),然后在同一菜单FB_BCM2708(支持BCM2708帧缓冲)。

如果执行此操作,并且希望将企鹅(或更确切地说是树莓)放在引导控制台上,请记住图形支持下的LOGO(引导徽标)。

您可能还想查看系统下的选项类型-> Broadcom2708(或9)实现。


GPIO / I2C



BCM2708_GPIO(系统类型-> Broadcom BCM2708实现)或对于Pi 2,相应的BCM2709选项。


/sys/class/gpio接口的GPIO_SYSFS(设备驱动程序-> GPIO支持)。

I2C(设备驱动程序) -> I2C支持),它将启用I2C_CHARDEV(I2C设备接口)。然后在“ I2C硬件总线支持”下:



I2C_BCM2708(BCM2708 BSC)。





拉斯皮卡姆



MEDIA_CAMERA_SUPPORT(设备驱动程序->多媒体支持->摄像机/视频采集卡支持)。

V4L_PLATFORM_DRIVERS(设备驱动程序->多媒体支持-> V4L平台设备”。) :



CONFIG_SOC_CAMERA(SoC摄像机支持)。

CONFIG_VIDEO_BCM2835(Broadcom BCM2835摄像机接口驱动程序)。这将启用“ Broadcom BM2835 MMAL摄像机接口驱动程序”。 (CONFIG_VIDEO_BCM2835_MMAL)也应该选择。




热传感器

您可以在这里选择;如果您尝试同时选择两者,则第一个将被取消(尽管您可以将其中一个作为模块构建,更改配置,构建另一个,并在需要时同时使用它们)。



SENSORS_BCM2835(设备驱动程序->硬件监视支持-> Broadcom BCM2835 HWMON驱动程序)。如果您未选择下面的“ BCM2835 Thermal Driver”,则该列表位于列表的底部。它使您可以访问/sys/devices/platform/bcm2835_hwmon-temp1_inputtemp1_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,其中包括temptrip_point_0_temp(与上述temp1_max相同)。各种用户空间监视器可能会更喜欢此方法,并且没有它可能无法工作。


#2 楼

对goldilock的精彩文章的评论:

只想添加我在rpi-4.1.y分支(05376fce25aaab4f47182a5af04928bfa06f30d6)观察到的一件事:为了使USB正常工作(包括USB连接的以太网),还必须启用BCM2708_MBOX(设备驱动程序->邮箱硬件支持-> Broadcom BCM2708邮箱(vcio))。 />
[    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


顺便说一句。 BCM2708_MBOX还是THERMAL_BCM2835和SND_BCM2835的先决条件。

#3 楼

视频(帧缓冲)

除了对视频的支持外,您还需要启用以下功能:

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


为了正确加载帧缓冲驱动程序。您可以在未启用DMA的情况下启用它,但是它将无法加载。

集成无线

要集成无线(RPi 3和Pi Zero W),您需要选择以下内容:

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)


#4 楼

可能已经老了,但是我是通过搜索找到的。
对于SDHC卡,您还需要

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

否则,您的内核将检测到SDHC卡,但是没有分区。