My Wiki!

Openwrt patches

Setup quilts

cat > ~/.quiltrc <<EOF
QUILT_DIFF_ARGS="--no-timestamps --no-index -pab --color=auto"
QUILT_REFRESH_ARGS="--no-timestamps --no-index -pab"
QUILT_PATCH_OPTS="--unified"
QUILT_DIFF_OPTS="-p"
EDITOR="nano"
EOF

Adding a new patch

To add a completely new patch to an existing package example start with preparing the source directory:

  make package/example/{clean,prepare} V=s QUILT=1

For host-side packages, you may want to detail the make target:

  make package/example/host/{clean,prepare} V=s QUILT=1

This unpacks the source tarball and prepares existing patches as quilt patch series (if any). The verbose output will show where the source got extracted.

Change to the prepared source directory.

  cd build_dir/target-*/example-*

Note : It can happen that you need to go one level lower as the source is extracted in builddir/target-/BUILD_VARIANT/example- . This happens when multiple build variants of a package are defined in the Makefile. Apply all existing patches using quilt push. quilt push -a Create a new, empty patch file with the quilt new command: quilt new 010-maincode_fix.patch

The name should start with a number, followed by a hyphen and a very short description of what is changed
The choosen number should be higher than any existing patch - use quilt series to see the list of patches
The patch file name should be short but descriptive

After creating the empty patch, files to edit must be associated with it. The quilt add command can be used for that - once the file got added it can be edited as usual. A shortcut for both adding a file and open it in an editor is the quilt edit command: quilt edit src/main.c

src/main.c gets added to 010-main_code_fix.patch
The file is opened in the editor specified with EDITOR in .quiltrc

Repeat that for any file that needs to be edited.

After the changes are finished, they can be reviewed with the quilt diff command.

   quilt diff

If the diff looks okay, proceed with quilt refresh to update the 010-maincodefix.patch file with the changes made.

   quilt refresh

Change back to the toplevel directory of the buildroot.

   cd ../../../

To move the new patch file over to the buildroot, run update on the package:

   make package/example/update V=s

Finally rebuild the package to test the changes:

   make package/example/{clean,compile} package/index V=s

If problems occur, the patch needs to be edited again to solve the issues. Refer to the section below to learn how to edit existing patches.

Edit an existing patch

Start with preparing the source directory: make package/example/{clean,prepare} V=s QUILT=1

Change to the prepared source directory. cd build_dir/target-/example-

List the patches available: quilt series

Advance to the patch that needs to be edited: quilt push 010-maincodefix.patch

When passing a valid patch filename to push, quilt will only apply the series until it reaches the specified patch
If unsure, use quilt series to see existing patches and quilt top to see the current position
If the current position is beyound the desired patch, use quilt pop to remove patches in the reverse order

Edit the patched files using the quilt edit command, repeat for every file that needs changes. quilt edit src/main.c

Check which files are to be included in the patch: quilt files

Review the changes with quilt diff. quilt diff

If the diff looks okay, proceed with quilt refresh to update the current patch with the changes made. quilt refresh

Change back to the toplevel diretory of the buildroot. cd ../../../

To move the updated patch file over to the buildroot, run update on the package: make package/example/update V=s

Finally rebuild the package to test the changes: make package/example/{clean,compile} package/index V=s


Navigation