版主: wanchong , wangyu , eepwwp , firedom |
wanchong
最后登陆时间:2014-06-17 08:56:07 |
本帖节选自自jt6562的博客,原帖地址:http://blog.csdn.net/jt6562/article/details/23831735
移植方案和步骤 kernel kernel移植是第一步也是最重要的步骤。首先,我们先来看看Galileo的kernel在Yocto里面是如何表示的。 先来看一下galileo的开发环境中关于kernel的目录结构: meta-clanton-bsp/recipes-kernel/linux$ tree .├── files │ ├── clanton.cfg │ ├── clanton.patch │ └── clanton-standard.scc └── linux-yocto-clanton_3.8.bb
files/clanton.cfg是kernel配置文件;files/clanton.patch,是基于.bb文件指定kernel版本的补丁文件。 我们再来看看linux-yocto-clanton_3.8.bb的内容,关键内容如下: SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git;branch=linux-3.8.y" SRC_URI += "file://clanton.patch" SRC_URI += "file://clanton.cfg" SRC_URI += "file://clanton-standard.scc" LINUX_VERSION ?= "3.8" LINUX_VERSION_EXTENSION ?= "-clanton" # Override SRCREV to point to a different commit in a bbappend file to # build a different release of the Linux kernel. SRCREV = "531ec28f9f26f78797124b9efcf2138b89794a1e" 其中,SRC_URI关键字指定kernel源代码地址,这里是通过git方式下载3.8分支;SRCREV指定在3.8分支下的commitid。有这两个信息,我们就能获取kernel的基线版本了。
BOARDNAME:=Galileo FEATURES:=ext4 pci usb LINUX_VERSION:=3.8.13 这里kernel版本选择的是3.8.13,而不是Galileo在Yocto里的3.8.7。原因可以参见下文[总结1]。由于kernel版本的不同,那么就意味着原来给3.8.7版本的补丁文件clanton.patch可能就会有问题。这个先不过,等打补丁的时候看看哪些有问题,再修改。
# modified: target/linux/x86/Makefile # new file: target/linux/x86/galileo/config-3.8 # new file: target/linux/x86/galileo/target.mk # new file: target/linux/x86/patches-3.8/200-galileo-clanton.patch
驱动 这部分内容主要是修改target.mk文件,增加一些Galileo单板必须的硬件驱动,包括网卡、USB、PCIE等。由于OpenWrt的特性,这是个细致活,因为要保证openwrt需要的ko在kernel配置中为模块而不是built-in。同时,也要确保openwrt没有的kmod(openwrt kernel module的封装形式),而Galileo又必需的驱动能built-in到kernel中。比如: CONFIG_STMMAC_ETH=y这个模块在openwrt没有现成的kmod可用,而这个网卡驱动又是galileo板子上的必须的驱动。所以不能编译为模块,只能编译到kernel里。 总结 1. OpenWrt本身的编译系统不支持,或者说强烈不建议使用自定义的kernel基线版本。这个可以从include/kernel-version.mk中看到,毕竟openwrt专有的kernel代码patch不可能兼容所有kernel版本。如果一定要使用,可以使用一个不存在的kernel分支,但是后面和openwrt的移植配套就很麻烦了。
2. OpenWrt中,修改kernel配置,使用命令:make kernel_menuconfig。修改完成后,需要将kernel编译目录下的.config拷贝回subtarget目录下,替换原来的config文件。然后,下一次执行OpenWrt的make动作是,一般会提示一些kernel的配置信息,需要手动确定。确定完成后,再执行一次.config的拷贝操作,确保新的config文件是完整的。
3. OpenWrt中,make menuconfig中的kernel modules里大部分的配置需要确保kernel能编译出ko文件,否则就会出现某个ko丢失的错误。简单说,make menuconfig是用来配置最终镜像的,make kernel_menuconfig是用来配置kernel的。这两个里面关于module的配置最好保持一直。kernel可以配置多一点,但不能少。
关键词:openwrt Galileo 移植 |
此帖由wanchong于2014-06-27 13:43:43最后编辑
|
|
Snake0301
最后登陆时间:2014-06-27 16:38:30 |
可没这么简单吧 openwrt听说好挑CPU的 |
共2条 1/1 1 |