openwrt配置内核驱动_openWRT最小内核/应用模块的添加++++config.in/Kbuild调用树(先后顺序)...

openWRT编译初体验:

sudo apt-get update

sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev

svn co svn://svn.openwrt.org/openwrt/branches/backfire

./scripts/feeds update -a

./scripts/feeds install -a

make menuconfig

make V=s(若想清除重新编译则make distclean)

openWRT添加最小驱动模块、最小应用模块:

1.添加内核模块

进入openWRT/package目录下,新建模块目录mkdir example----->

cd example; touch Makefile;touch config.in ;mkdir src(makefile中PKG_NAME:=example;define KernelPackage/example;

$(eval $(call KernelPackage,example))语句是将该内核模块编译进系统的,必加)----->

cd src; touch makefile----->

在openWRT/tmp/.config-package.in中添加一个一级菜单并在菜单中包source "package/example/config.in"

make package/example/compile编译该模块即可。

如:

menu "Ralink Properties"

menu "Applications"

config PACKAGE_ated

tristate "ated.......................................................... ATE Daemon"

default y if DEFAULT_ated

default m if ALL

select PACKAGE_libc

select PACKAGE_librt if USE_EGLIBC

select PACKAGE_libpthread if USE_EGLIBC

help

ATE Daemon

endmenu

menu "Drivers"

menuconfig PACKAGE_kmod-rt2860v2

tristate "kmod-rt2860v2............................... Ralink MT7620 wifi AP driver"

default y if DEFAULT_kmod-rt2860v2

default y if (CONFIG_TARGET_ramips_mt7620n || CONFIG_TARGET_ramips_mt7620a)

select PACKAGE_maccalc

select PACKAGE_wireless-tools

depends on TARGET_ramips_mt7620a

help

This package contains a driver for MT7620

source "package/ralink/drivers/mt7620/config.in"

endmenu

endmenu

2.添加用户态工具或最小应用模块

进入openWRT/package目录下,新建模块目录mkdir example2----->

cd example2; touch Makefile;touch config.in ;mkdir src(makefile中PKG_NAME:=example2;define Package/example2;

$(eval $(call Package,example2))语句是将该内核模块编译进系统的,必加)----->

cd src; touch makefile----->

在openWRT/tmp/.config-package.in中添加一个一级菜单并在菜单中包source "package/example/config.in"

make package/example/compile编译该模块即可。

注:应用模块的新加菜单一般放在一级菜单Base system下,应用菜单作为二级或三级菜单。

openWRT各Kconfig或config.in的调用顺序:

顶层config.in:mainmenu "OpenWrt Configuration"

source "target/Config.in"

source "config/Config-images.in"

source "config/Config-build.in"

source "config/Config-devel.in"

source "toolchain/Config.in"

source "target/imagebuilder/Config.in"

source "target/sdk/Config.in"

source "target/toolchain/Config.in"

source "tmp/.config-package.in"

1.1source "target/Config.in":实现了类似内核中ARCH=arm及make SMDKxxx_defconfig的功能。

source "tmp/.config-target.in"

# Kernel/Hardware features

config GPIO_SUPPORT

config PCI_SUPPORT

config USB_SUPPORT。。。----既无menu又无choice故非配置菜单。

# Architecture selection

config arm_v7

config mips。。。

1.2source "tmp/.config-target.in"

choice----------------------一级菜单

prompt "Target System"

default TARGET_ar71xx

config TARGET_ppc44x

config TARGET_bcm53xx

config TARGET_octeon

config TARGET_ramips

bool "Ralink RT288x/RT3xxx"

end choice--------------------一级菜单结束

choice

prompt "Subtarget" if HAS_SUBTARGETS------一级菜单

config TARGET_ramips_mt7620a

bool "MT7620a based boards"

select LINUX_3_10

depends on TARGET_ramips

select USES_DEVICETREE

select GPIO_SUPPORT----选中TARGET_ramips_mt7620a后会连带选中以下select各项

select PCI_SUPPORT

select USES_SQUASHFS

select USB_SUPPORT

select mipsel

。。。。。。

end choice-----------------------一级菜单结束

choice

prompt "Target Profile"--------------------一级菜单,配置菜单中只有一个选项但选中后会连带选中如下一系列select项。

config TARGET_ramips_mt7620a_Default

bool "Default Profile"

depends on TARGET_ramips_mt7620a

select DEFAULT_base-files

select DEFAULT_busybox

select DEFAULT_dnsmasq

select DEFAULT_dropbear

select DEFAULT_firewall

select DEFAULT_fstools

select DEFAULT_ip6tables

select DEFAULT_iptables-----------Default package set compatible with most boards.

select DEFAULT_iwinfo

select DEFAULT_kmod-gpio-button-hotplug

select DEFAULT_kmod-ipt-nathelper

select DEFAULT_kmod-leds-gpio

select DEFAULT_kmod-ledtrig-usbdev

select DEFAULT_kmod-rt2800-pci

select DEFAULT_kmod-rt2800-soc

select DEFAULT_kmod-usb-core

select DEFAULT_kmod-usb-dwc2

select DEFAULT_libc

select DEFAULT_libgcc

select DEFAULT_mtd

select DEFAULT_netifd

select DEFAULT_odhcp6c

select DEFAULT_odhcpd

select DEFAULT_opkg

select DEFAULT_ppp

select DEFAULT_ppp-mod-pppoe

select DEFAULT_swconfig

select DEFAULT_uci

select DEFAULT_wpad-mini

end choice---------------------------一级菜单结束

================================================================================================================================================

squashfs-lzma:制作squashfs文件系统,并用lzma压缩算法压缩(若硬件平台选Ralink则root filesystem默认用squashfs-lzma压缩,

最终用脚本将uImage和压缩的root filesystem压成一个固件包)。

--------------->固件就是内核+根文件系统放在一个分区,类似硬盘的分区系统可按需读取该分区上的任一个文件。

2.1 source "config/Config-images.in"

menu "Target Images"----------------一级菜单

choice-----------------------------二级菜单

config TARGET_INITRAMFS_COMPRESSION_LZMA-------若使用内核的Initramfs则需选择Initramfs的压缩方式。

config TARGET_ROOTFS_TARGZ---------------------若root filesystem直接打包,则需选择打包所用压缩格式(tar.gz或cpio.gz)。

config TARGET_ROOTFS_JFFS2--------------------文件系统的映像(images)类型,一般为squashfs或yaffs2。

endchoice------------------------二级菜单结束

source "target/linux/*/image/Config.in"-----二级菜单,不过该菜单只有X86\at91\avr32及博通等几个硬件平台有,其他平台不需要。

endmenu-------------------一级菜单结束

=================================================================================================================================================

3.1 source "config/Config-build.in"

menu "Global build settings"-----------------一级菜单

config COLLECT_KERNEL_DEBUG---收集内核编译符号表及其他模块的编译符号表,调试用。

comment "Kernel build options"

source "config/Config-kernel.in"

comment "Package build options"

config DEBUG-------将package的符号表等信息编到package中

3.2 comment "Kernel build options"

config KERNEL_EARLY_PRINTK

config KERNEL_PRINTK_TIME----选中后内核Printk会打印时间信息(内核本身的编译选项)。

config KERNEL_NAMESPACES

config KERNEL_KALLSYMS------使能内核编译符号表编译到内核(内核本身的编译选项)。

==================================================================================================================================================

4.1 source "config/Config-devel.in"和source "toolchain/Config.in"

menuconfig DEVEL------------------一级菜单

bool "Advanced configuration options (for developers)"

config DOWNLOAD_FOLDER---------可设置make时下载文件的存放目录

config TARGET_ROOTFS_DIR--------修改根文件系统所在的目录

config KERNEL_GIT_CLONE_URI-----配置所需内核版本的git下载链接

config KERNEL_GIT_LOCAL_REPOSITORY

config BUILD_LOG--------------配置编译时是否记录错误日志

config SRC_TREE_OVERRIDE----自定义package目录源码的位置

config EXTERNAL_KERNEL_TREE----自定义内核源码目录(使用自己的内核源码)

menuconfig TARGET_OPTIONS---------二级菜单

bool "Target Options"  if DEVEL

config TARGET_OPTIMIZATION----开启编译器优化

endmenu

menuconfig EXTERNAL_TOOLCHAIN-----二级菜单

config NATIVE_TOOLCHAIN---配置使用host及toolchain目录中编译出来的工具及编译器,否则需要自定义工具的名称、安装路径、及工具链头文件和依赖库路径。

source "toolchain/eglibc/Config.in"

source "toolchain/uClibc/Config.in"

source "toolchain/musl/Config.in"

source "toolchain/gcc/Config.version"

source "toolchain/eglibc/Config.version"

source "toolchain/uClibc/Config.version"

source "toolchain/musl/Config.version"

========================================================================================================================

5 下面这三项包含的内容极少:

source "target/imagebuilder/Config.in"

source "target/sdk/Config.in"

source "target/toolchain/Config.in"

bool "Build the OpenWrt Image Builder"---若不用外部工具链且不用Initramfs,openWRT就编译生成Image构建工具。

depends on !TARGET_ROOTFS_INITRAMFS

depends on !PROFILE_KCONFIG

depends on !EXTERNAL_TOOLCHAIN

config SDK

bool "Build the OpenWrt SDK"---------只要不用外部工具链,openWRT就编译SDK。

depends on !EXTERNAL_TOOLCHAIN

config MAKE_TOOLCHAIN

bool "Build the OpenWrt based Toolchain"

depends on !EXTERNAL_TOOLCHAIN-----------只要不用外部工具链,openWRT就选中该配置项进而自行编译安装所有工具和工具链。

====================================================================================================================

6.1 source "tmp/.config-package.in"

menuconfig IMAGEOPT--------------一级菜单

bool "Image configuration"

source "package/*/image-config.in"------类似Uboot传递的bootargs参数(如init=/bin  ipaddr等环境变量)

endmenu

menu "Base system"--------------------------------一级菜单

config PACKAGE_Smartroom--------------------------自定义的模块

tristate "Smartroom............................................ wulian MT7620 tools"

default y if DEFAULT_Smartroom

default m if ALL

select PACKAGE_libc

select PACKAGE_librt

select PACKAGE_libsqlite3

select PACKAGE_libstdcpp

select PACKAGE_libpthread

select PACKAGE_librt if USE_EGLIBC

select PACKAGE_libpthread if USE_EGLIBC---优化场景执行功能;优化设备管理(网关重启后生效)。

config PACKAGE_base-files---------该配置项用于选中openWRT系统启动脚本

tristate "base-files................................... Base filesystem for OpenWrt"

default y if DEFAULT_base-files

default m if ALL

select PACKAGE_libc

select PACKAGE_procd-----------若配置了openWRT的系统启动脚本,那这些select选项必选。

select PACKAGE_netifd

select PACKAGE_librt if USE_EGLIBC

select PACKAGE_libpthread if USE_EGLIBC

source "package/utils/busybox/Config.in"---------二级菜单,busybox的配置菜单

source "package/system/udev/Config.in"-----------二级菜单,udev的配置菜单(udev替代devfs及hotplug,管理/dev目录设备文件)

config PACKAGE_wulian-tools

tristate "wulian-tools......................................... wulian MT7620 tools"

default y if DEFAULT_wulian-tools

default m if ALL

select PACKAGE_lua

select PACKAGE_zlib

select PACKAGE_libopenssl

select PACKAGE_libpcre

select PACKAGE_libstdcpp

select PACKAGE_libpthread

select PACKAGE_libpthread if USE_EGLIBC

select PACKAGE_libc

select PACKAGE_librt

select PACKAGE_librt if USE_EGLIBC

select PACKAGE_libsqlite3

endmenu

menu "Boot Loaders"---------------部分硬件平台支持Uboot配置选项,选中后便可使用openWRT工程中的Uboot?

config PACKAGE_uboot-sunxi-pcDuino--------一级菜单

endmenu----------------------------------一级菜单结束

menu "Kernel modules"-----------一级菜单

menu "Block Devices"--------二级菜单

config PACKAGE_kmod-ata-core

config PACKAGE_kmod-mvsas-----Kernel support for the Marvell SAS SCSI adapters。

endmenu--------------------二级菜单结束

menu "Wireless Drivers"--------二级菜单

config PACKAGE_kmod-rt2800-pci-----雷凌pci接口的网卡驱动,不是片上的WiFi驱动。

config PACKAGE_kmod-rt2800-usb-----雷凌USB接口的网卡驱动,不是片上的WiFi驱动。

endmenu--------------------二级菜单结束

endmenu--------------------一级菜单结束

menu "JavaScript"---------一级菜单,如下这些一级菜单均是可选择的,一般只选menu "Lua" ?

menu "Java"

menu "Lua"

menu "PHP"

menu "Perl"

menu "Ruby"

menu "Libraries"------------一级菜单

menu "Filesystem"-------二级菜单

config PACKAGE_libattr----libattr库,为文件系统提供libattr库?

config PACKAGE_libext2fs---libext2fs is a library which can access ext2, ext3 and ext4 filesystems.

endmenu----------------二级菜单结束

menu "Firewall"-------二级菜单

PACKAGE_libip4tc-----IPv4防火墙必需的libiptc开源库

endmenu------------二级菜单结束

source "package/libs/openssl/Config.in"

source "feeds/packages/libs/gnutls/Config.in"

source "package/libs/openssl/Config.in"

menu "Sound"---------二级菜单

config PACKAGE_liblo------轻量级开源声音控制库

endmenu

menu "Database"---------二级菜单

config PACKAGE_libsqlite2------开源数据库

config PACKAGE_pgsqlodbc----Postgresql driver for ODBC.

endmenu

你可能感兴趣的:(openwrt配置内核驱动)