Linux内核裁剪实例从零开始配置内核是不明智的,建议在某一个默认配置的基础上进行修改,以达到自己产品的实际需求。
裁剪和配置内核的基本原则:⏹基于某一个最接近的主板配置来修改;⏹必须的、能确定的选项选中;⏹不能确定的则不要改变原来配置;⏹可选可不选的,建议根据help信息决定或者不选;⏹一次改动不要太多,渐进式修改和验证;⏹注意及时备份配置文件,出现意外可以回退恢复。
下面给出一些常见功能的配置裁剪实例,很多功能与所采用的主板硬件相关,与其它不同主板的内核配置上不一定完全相同,但还是有一些参考意义。
1.1.1 GPIO子系统配置Linux 2.6以上内核引入了子系统,GPIO子系统将全部GPIO的操作接口都通过“/sys/class/gpio/”目录导出,非常方便用户使用。
输入下列命令,进入内核配置菜单:$ make ARCH=arm menuconfig在主菜单界面中选择“Device Drivers”:[*] Networking support --->Device Drivers --->File systems --->Kernel hacking --->进入“Device Drivers”界面,选择并进入“GPIO Support”:[*] SPI support --->PPS support --->PTP clock support-*- GPIO Support ---><*> PWM Support --->在“GPIO Support”中选中“/sys/cla ss/gpio…”:--- GPIO Support[*] /sys/class/gpio/... (sysfs interface)*** Memory mapped GPIO drivers: ***…配置后重新编译内核,使用新内核的系统即可通过“/sys/class/gpio/”访问系统的GPIO 了。
1.1.2 LED子系统配置Linux LED子系统提供了“/sys/class/leds/”的访问接口,启用LED子系统能很方便地操作系统的LED资源。
在“Device Drivers”配置界面,选中“LED Support”支持:<*> MMC/SD/SDIO card support ---><> Sony MemoryStick card support (EXPERIMENTAL) --->[*] LED Support --->[ ] Accessibility support --->进入“LED Support”子菜单,选中LED类支持和LED触发器支持,并根据需要设置触发器:--- LED Support[*] LED Class Support*** LED drivers ***...[*] LED Trigger support*** LED Triggers ***<*> LED Timer Trigger<*> LED Heartbeat Trigger<> LED backlight Trigger<*> LED GPIO Trigger<*> LED Default ON Trigger只要将系统的LED设备驱动添加到LED子系统中,即可通过“/sys/class/leds/”接口来进行访问。
1.1.3 串口配置串口是嵌入式Linux必不可少的外设,默认控制台通常就是串口,所以必须在内核中使能串口以及串口控制台支持。
在“Device Drivers”配置界面,选择“Character devices”:Input device support --->Character devices--->-*- I2C support --->进入“Character devices”配置菜单,选择“Serial drivers”:[*] /dev/kmem virtual device supportSerial drivers--->[ ] ARM JTAG DCC console进入“Serial drivers”,在配置界面进行串口控制器配置。
嵌入式Linux默认控制台是串口,所以还需使能串口控制台支持。
串口控制器与具体处理器相关,需要根据硬件进行选择,很多处理器移植代码会默认选中自身的串口驱动支持,例如EPC-28x,已经默认选中了“i.MXS Application serial port support”:<M> 8250/16550 and compatible serial support*** Non-8250 serial port support ***<*> i.MXS debug serial port support<*> i.MXS Application serial port support...1.1.4 USB Host驱动配置USB可以外接多种设备,不同设备的驱动配置也是不同的。
下面以常用的U盘、USB 鼠标键盘配置为例进行介绍。
1.使用U盘U盘在Linux系统下被认为是SCSI设备,所以必须在内核中选择支持SCSI。
在主菜单界面选择“Device Drivers”,进入设备驱动配置界面,选择“SCSI device support”:[*] Block devices --->[*] Misc devices --->SCSI device support ---><> Serial ATA and Parallel A TA drivers --->进入“SCSI device support”配置界面,进行如下配置:<> RAID Transport Class<*> SCSI device support<> SCSI target support[*] legacy /proc/scsi/ support*** SCSI support type (disk, tape, CD-ROM) ***<*> SCSI disk support<> SCSI tape support<> SCSI OnStream SC-x0 tape support然后在驱动中配置USB控制器。
进入“Device Drivers”,选中“USB support”:<> Sound card support --->[ ] HID Devices --->[*] USB support---><*> MMC/SD/SDIO card support --->进入“USB support”菜单,选中“Support for Host-side USB”,并根据处理器的控制器情况配置USB控制器。
下面是EPC-28x处理器USB控制器的配置:--- USB support<*> Support for Host-side USB[*] USB device filesystem (DEPRECA TED)[*] USB device class-devices (DEPRECA TED)[*] USB runtime power management (suspend/resume and wakeup)<*> EHCI HCD (USB 2.0) support[*] Support for Freescale controller[*] Support for Host1 port on Freescale controller[*] Support for DR host port on Freescale controller[*] Root Hub Transaction Translators使用U盘,必须使能USB大容量类支持,选中“USB Mass Storage support”:…<*> USB Mass Storage support[ ] USB Mass Storage verbose debug大多数情况下,U盘都在用FAT格式,为了能正常使用U盘,还需在内核中使能FAT 支持。
菜单路径和配置如下:File systems --->DOS/FAT/NT Filesystems ---><*> MSDOS fs support<*> VFA T (Windows-95) fs support(437) Default codepage for FAT(iso8859-1) Default iocharset for FAT<> NTFS file system support保存配置,重新编译内核,基于新内核的系统就能使用U盘了。
2.使用USB键盘和鼠标使用USB键盘或者鼠标,需要在内核中使能HID支持。
在“Device Drivers”菜单界面,选中“HID Devices”:<*> Sound card support --->[*] HID Devices--->[*] USB support ---><*> MMC/SD/SDIO card support --->进入“HID Devices”,选中“USB Human Interface Device (full HID) support”:--- HID Devices-*- Generic HID support[ ] /dev/hidraw raw HID device support*** USB Input Devices ***<*> USB Human Interface Device (full HID) support[ ] PID device support[ ] /dev/hiddev raw HID device supportSpecial HID drivers --->另外,还需使能Event支持。
在“Device Drivers”配置界面,选择“Input device support”:<> Telephony support --->Input device support--->Character devices --->-*- I2C support --->进入“Input device support”,选中“Event interface”:<> Joystick interface<*> Event interface<> Event debugging当然,还需要USB Host支持,参考前面“使用U盘”配置部分配置好USB控制器。