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配置内核驱动_openWRT最小内核/应用模块的添加++++config.in/Kbuild调用树(先后顺序)...相关推荐

  1. openwrt配置内核驱动_openwrt 增加RTC(MCP7940 I2C总线)驱动详解

    标签: 一.硬件平台 1.1 控制器:MT7620(A9内核) 1.2 RTC芯片:MCP7940(I2C总线) 二.软件平台 2.1.开发环境:Ubuntu12.04 2.2.软件版本:openwr ...

  2. openwrt配置内核驱动_Openwrt编译 -- 用户自定义添加app的开机自启动

    一.概述 1.在openwrt系统内init进程被procd取代,procd作为父进程可以监控子进程的状态.一旦子进程退出后即可在某一个时刻尝试进行重启进程. 2.如果应用软件需要在 boot 时自动 ...

  3. openwrt配置内核驱动_openwrt增加内核模块的方法

    开发环境为ubuntu.首先搭建编译环境. sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf get ...

  4. openwrt配置内核驱动_OpenWrt添加驱动模块

    1. 添加模块目录 在package/kernel/下执行命令: mkdir example 2. 建立Makefile 在package/kernel/example建立Makefile文件,命令: ...

  5. Linux内核驱动调试,Linux内核设备驱动之内核的调试技术笔记整理

    /****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中 ...

  6. linux内核驱动子系统,linux内核中的MFD子系统

    分析用的内核版本为5.1.3 1.MFD全称 Multi-function Device,多功能设备 2. 为何会出现MFD子系统 由于出现了一类具有多种功能的外围设备或cpu内部集成的硬件模块 3. ...

  7. 最小的linux内核编译,Linux最小内核移植

    class="markdown_views prism-github-gist"> Linux内核编译 本篇博客来自凌云实验室开发板介绍及其烧录学习笔记 1.内核介绍 一种开 ...

  8. Linux内核驱动之延时---内核超时处理【转】

    转自:http://blog.chinaunix.net/uid-24219701-id-3288103.html  内核超时处理 jiffies 计数器 定时器中断由系统定时硬件以规律地间隔产生;  ...

  9. 【内核驱动】 在内核源码中添加第一个驱动程序

    开发环境: Redhat6.5 开发板: Tiny4412 (ARM Cortex A9) 1.  在内核源码中创建自己的目录 2. 在对应的目录中创建源文件和Makefile文件   3. 对应文件 ...

最新文章

  1. linux 磁盘管理3板斧,Linux 磁盘管理的命令
  2. python调用bat脚本传参,将参数从批处理文件传递给Python
  3. boost::stl_interfaces模块实现互操作性的测试程序
  4. 如何正确使用Windows的Ping命令
  5. DataFrame挑选其中两列,带列名
  6. WPF中设置了WindowStyle=None后,窗口仍然有边框的解决方法
  7. poj3648 Wedding 2-sat
  8. 实战GraphQL+express+mysql项目完整demo
  9. 图解系列之JAVA执行过程
  10. 求数组中最大值和次大值
  11. ab st语言编程手册_罗克韦尔ab plc micrologix 1400 编程手册中文高清版 .pdf
  12. 学习笔记——直流电机调速器
  13. Java技术图谱!黑马java培训课程目录
  14. 关于a标签 中特有的tilte属性 和 字符串文字换行
  15. 网络芯片比较:DP83848、DM9000、enc28j60、RLD8019、w5100
  16. 核密度函数加权直方图的计算
  17. Backtrack5 搭建Nessus
  18. 大商创小程序源码_小程序直播系统有哪些基本功能
  19. 黑马程序员————高新技术————JDK1.5新特性
  20. 首发 | 杭派工程师五年生存现状报告

热门文章

  1. 现代控制理论的matlab上机实验 将状态空间模型转换成传递函数模型(便于求各种响应)
  2. aPaaS和iPaaS的区别
  3. 全国计算机一级office2010,全国计算机等级考试一级MS Office2010教程
  4. 【Python实战】Python采集大学教务系统成绩单
  5. linux挂载U盘,mount命令搞定!
  6. 深入浅出统计学第七章 几何分布,二项分布,柏松分布
  7. 李开复教你如何给自己的简历打分
  8. unity DearVR混响效果
  9. ASCII学习对照表
  10. 一天2起电动汽车起火事件:特斯拉之后,蔚来又烧了