如何在Openwrt上,针对内核创建自定义Patch?

参考资料:

1.http://wiki.openwrt.org/doc/devel/patches?s[]=quilt   --- 官方对于如何打Patch的说明

2.http://blog.csdn.net/hbsong75/article/details/8825184  --- 使用quilt的小例子

众所周知,openwrt采用的是:从各个开源站点下载源码,解压缩,然后再打上N多Patch的方式,来搭建自己的编译环境的。其中,针对内核的编译,也是这么操作的。

那么,如何为内核创建自定义的Patch呢?

1. 使用quilt工具

quilt是一个开源的管理Patch的工具,openwrt采用此工具来生成Patch和打上Patch。具体使用方法,见参考资料2

2.从官网下载的openwrt的SDK中,针对内核已经有一些现存的Patch了。他们放在: target/linux/XXX子目录中,其中:

generic/ contains patches common to all architectures and   --- generic目录下存放的Patch,适用于所有的设备结构,即通用patch

platform/ contains patches specific to the current target       --- platform目录下存放的Patch,则适用于此platform自身。当然,实际就是类似:ar71xx,ramips这类的platform

3. 如何为一个具体的Platform创建自定义的Patch?

举例:由于开发需要,需要针对AR9331的目标设备,在内核增加一些代码,其中需要修改文件:build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/linux-3.14.18/arch/mips/ath79/Kconfig,增加自定义的几个宏定义。那么,如何为这几个自定义的宏定义,创建Patch?

A.准备一个干净的SDK,即没有编译过的干净的openwrt SDK

B.通过make menuconfig 和 make kernel_menuconfig,设置好目标设备类型:这里就是选择好我们要编译的是 ar71xx目标 --- 否则,openwrt怎么知道是需要打上针对哪个platform的Patch呢?

C. 敲入命令:make target/linux/{clean,prepare} V=s QUILT=1 --- 用于将linux内核压缩包解压并完成openwrt自带的Patch文件的打入工作

实际上,在上一步 make kernel_menuconfig后,就已经完成这一步的操作了

D. 进入内核解压缩后,所在的目录,这里是:build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18  --- 此目录下,有一个patches目录,里面有:

generic  platform  series  其中,generic和platform是目录,就是针对此目标设备的patches了

由于我们这里要增加的是针对 特定platform的,所以进入platform目录,再看看:里面有N多.patch文件,从102开始,到902  --- 注意:openwrt的patch打上顺序,是从小序号开始的,即从102开始;因此,我们自定义的Patch,需要放到最后。 但是,如果我们选择1001开始,似乎这个就变成第一个被打上的patch了

E. 回到目录:build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18

我们选择 从910开始自定义的Patch创建,则这里设置命令:quilt new platform/910-MIPS-ath79-XXXX.patch (名字要简短但有意义)

F. 进入实际要修改文件所在目录:build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18/arch/mips/ath79 ,采用 quilt edit Kconfig,从而打开nano编辑工具,加入自定义内容,并保存退出

G. 敲入 quilt diff,可以看到我们修改的内容;

敲入 quilt refresh,就可以将我们修改的内容,写入到对应的patch文件中了: 910-MIPS-ath79-XXXX.patch

H. 将build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18/patches/platform/910-MIPS-ath79-XXXX.patch 
 拷贝到target/linux/ar71xx/patches-3.14  --- 这样,就真正将这个Patch 收编到SDK中了

I.将之前解压缩的linux内核目录全部删除:  make target/linux/clean

然后,再利用 make kernel_menuconfig  或者  make target/linux/prepare V=s QUILT=1 就看到我们自定义的Patch已经生效了

时间: 2024-10-03 22:29:26

如何在Openwrt上,针对内核创建自定义Patch?的相关文章

如何在openwrt上实现 U盘的自动挂载

U盘的自动挂载,分为两种场景 1.路由器先上电,然后插上U盘并自动挂载 2.路由器先插上U盘,然后上电并自动挂载 上述场景的实现,需要如下几个步骤: 1.支持如下模块: USB驱动模块:USB OHCI/USB 2.0/USB UHCI 文件系统支持:VFAT,ntfs-3g, 字符集支持:cp437/CP936/utf-8/iso8859-1 网络文件服务:samba server 2.使用hotplug机制,放入挂载脚本文件:/etc/hotplug.d/block/30-block_mou

分享如何在github上为代码创建一个链接

从自学前端到现在差不多一个月了,在此期间,一直有一种困惑,如何将自己电脑中编写的代码生成一个链接,以便可以发布呢?今天有幸被高人指点一二,现将其分享. 第一步,网上注册一个github账号 第二步,新建一个repository 注意:这里选择public,而不是private 点击create repository 第三步,选择一个主题,点击settings 第四步,添加自己的代码 建立一个新的文件,比如 保存 删掉index.md 第五步,复制链接 https://941117pml.gith

如何在openWRT系统上实现双版本

最近由于项目需要,需要在AR9331芯片单板(原来是4MBFlash,后来扩充到16MB Flash)上,实现openwrt双版本机制. 双版本的好处,主要是:在升级版本过程中,如果遇到断电等情况,不至于导致设备无法启动.因为至少有一个版本是完好的,虽然可能旧了一点. 基于此需求,需要实现的功能,包括: 1.改造uboot,能识别此款16MB Flash 2.改造uboot,能找到Flash中的所有可引导的内核版本,以及对应的rootfs:并选择合适的(较新的)内核进行引导 3.在rootfs中

Drupal创建自定义表单,上传文件代码

Drupal中创建自定义表单,用来上传文件,对上传文件做一些操作.以下是放在Module中的代码: 一.菜单建立表单路径 /** Implementation of hook_menu(). */ function moduleName_menu () { $items = array(); $items['admin/import'] = array( 'title' => 'title', 'page callback' => 'drupal_get_form', 'page argume

CMPT4:如何在AD上创建System Management容器以及设置权限

ConfigMgr Prerequisites Tool 使用指南系列-4:如何在AD上创建System Management容器以及设置权限 ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk实战培训视频课程:https://edu.51cto.com/lecturer/733218.html2019/05/16 操作说明 我们将借助ConfigMgr Pr

sharepoint 2010 创建自定义的ASP.NET Web Service (上)

项目背景 根据客户需求在SharePoint 2010 中创建自定义的ASP.NET Web Service可以分为3种方式(我所知道的).废话少说,下面一一列举: 创建方式 MSDN 官方博客自己的一个创建ASP.NET Web Service.http://msdn.microsoft.com/zh-cn/library/ms464040(v=office.14).aspx 但是它不推荐这种方式. 通过创建类库项目,使类库项目包装webservice. MSDN推荐使用的方式,通过WCF创建

【翻译】在Ext JS和Sencha Touch中创建自定义布局

原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置,因而,不需要手动去管理那些碎片.Ext JS与Sencha Touch的布局类有许多相似之处,最近在 Ivan Jouikov的这篇博文中对他们进行了详细的分析. 虽然是这样,但很多Ext JS和Sencha Touch开发人员可能永远都不会去了解布局系统的机制原理.Sencha框架已经提供了最常

如何在CentOS6上安装Python2.7和Python3.3

原文来自http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/,个人觉得对在linux安装新版本Python是很有参考意义,因而转载,原文是英文的,本人简单翻译下,大家看懂即可,有不妥的地方请留言. 如何在CentOS 6上同时安装Python 2.7和Python 3.3 本文将介绍如何在CentOS 6上安装Python 2.7和3.3.下面以Python 2.7.6和Python 3.3.5为例进行说明,但本人实

Android创建自定义dialog方法详解-样式去掉阴影效果

在自定义组件时,从已有组件源码中会很大收获.就拿progressDialog来说     间接父类是dialog,想了解dialog继承结构可以去百度,或者    从构造器来说ProgressDialog(Context context, int theme)很明显需要个样式主题文件,我们可以在value文件下自定义一个样式文件.   从外观上需要个动态效果控件和文本框两个属性    ProgressBar mProgress;   TextView mMessageView源码中onCreat