(完整word版)Openwrt学习笔记_x86 固件编译部署_2015.8.19修订
openwrt x86 编译部署
0.配置编译环境
(略)
1.获取源代码
(略)
2.一些问题
config文件位置:
openwrt config 文件:/.config
Kernel config 文件:build_dir/target-xxxxxxx/linux-x86_generic/linux-x.xx.xx/.config 内核版本更改:
3.make menuconfig
这里给出一个基本配置,正常使用默认配置即可,不需要Customize busybox options,这些另外的配置基本是x86必须的。
为了在以后的initramfs中加入一些overlayfs的功能,添加了一
些配置。
[ ] Don't use /usr 该项不选!,否则无法生成 /usr/sbin/ntpd-hotplug 及其他文件,导致busybox-*.ipk生成失败!
添加文本编辑工具:
Utilities ---> Editors ---> <*> nano Utilities ---> Editors ---> <*> vim-full
其中Wifi ap 模式用 wpad 代替 hostapd 和 wpa-supplicant!
建立网站支持:
Languages --> PHP --> <*> PHP5
php5-cgi
php5-fastcgi
php5-mod-ctype
php5-mod-curl
php5-mod-exif
php5-mod-ftp
php5-mod-gd
php5-mod-iconv
php5-mod-json
php5-mod-mbstring
php5-mod-mcrypt
php5-mod-mysql
php5-mod-pdo
php5-mod-pdo-mysql
php5-mod-session
php5-mod-sockets
php5-mod-sqlite3
php5-mod-tokenizer
php5-mod-xml
php5-mod-zip
Utilities --> database --> <*> mysql server
#如安装了nginx 则需修改uhttpd 的端口,以便 luci 可通过web 正常访问Network --> Web Servers/Proxies --> <*> nginx
Network --> Web Servers/Proxies --> <*> spawn-fcgi
Utilities --> zoneinfo --> <*> zoneinfo-core
Utilities --> zoneinfo --> <*> zoneinfo-asia
Utilities --> <*> shadow-utils (可选 shadow-groupadd 和 shadow-useradd) Network --> Captive Portals --> Server --> <*> wifidog
4.make kernel_menuconfig
目的是为了加入x86的多核心以及大内存支持
Device Drivers
< >A TA/ATAPI/MFM/RLL support(DEPRECA TED)--->
SCSI device support--->
<*>SCSI generic support (kernel module --> Block Devices --> <*> kmod-scsi-core)
<*>Serial ATA and Parallel ATA drivers--->
<*>AHCI SATA support (kernel module --> Block Devices --> <*> kmod-ata-ahci)
<*>Intel ESB,ICH,PIIX3,PIIX4 PA TA/SATA support (默认选中)
<*>VIA SATA support
<*>VIA PATA support
……(根据你的硬件情况选择)
[*]Multiple devices driver support (RAID and LVM) --->
[*]Network device support ---> (网卡驱动支持,根据你的硬件情况选择)[*] Ethernet driver support --->
[*] Marvell devices
<*> Marvell MDIO interface support
<*> Marvell Yukon Gigabit Ethernet support
<*> Marvell Yukon 2 support
[*] Realtek devices
<*> Realtek RTL-8139 C+ PCI Fast Ethernet Adapter support()
<*> Realtek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support()
<*> Realtek 8169 gigabit ethernet support
设置了Power management and ACPI options --> [*] ACPI (Advanced Configuration and Power Interface) Support后,需要在CPU Frequency scaling --> x86 CPU frequency scaling drivers ---> 中选择一个驱动,否则会全速运行!
如果没有设置,在编译时Inter Enhanced SpeedStep (deprecated)一项需要手动确认,其他都默认为“n”。
5.make
编译
6.安装
固件简介
ls bin/x86
会看到有以下一些文件,与官方编译的固件名称完全相同,这里大概解释
下:
openwrt-x86-generic-combined-ext4.img.gz:包含vmlinuz、rootfs (ext4)、引导信息以及相关分区信息的img,一般是两个分区,可以把它看成是硬盘镜像,直接dd到某个磁盘。
openwrt-x86-generic-rootfs-ext4.img.gz: rootfs分区镜像,可以直接dd到某个分区,或者mount -o到某个目录。
openwrt-x86-generic-rootfs-squashfs.img:同上
openwrt-x86-generic-vmlinuz: kernel
openwrt-x86-generic-Generic-rootfs.tar.gz:rootfs用gz打包后的文件
可以看出,要让系统启动,需要引导器(x86是使用grub,好比是路由中的uboot,当然uboot管的内容更多)、kernel、rootfs三者。
简易部署
如果你的磁盘(U盘)只用于openwrt系统,可以使用最简单的用combined.img直接dd到目标盘,这样的好处是简单,坏处是如果你的sdb
(磁盘/U盘)很大,就带来空间浪费,虽然可以在rootfs中存数据,但是下次升级系统就带来不必要的麻烦,命令行如下:
自定义部署
适合有一定基础的兄弟,大致步骤:
(1)建立分区、文件系统;
(2)用dd将rootfs.ext4.img写入到分区;
(3)复制vmlinuz到分区;
(4)安装引导
如果主板是bios,我习惯用grub4dos,参见无忧启动;
如果主板是efi,我习惯用grub2,需要efi文件系统(fat文件系统),在分区的时候要记得加入,参照各大linux发行版。
(5)编辑menu.lst;
(6)启动
7.关于initramfs && overlayfs
overlayfs:
由于openwrt x86一般都是安装在U盘/TF卡/硬盘等介质上,默认
是ext文件系统,就没有使用overlayfs,如果要使用overlayfs就
得用squashfs。由于从路由过度过来,我个人对overlayfs颇有好感,
着手在x86的ext4上加入overlayfs支持。稍后,会单独写一篇关于
x86下overlayfs的文档。
initramfs:
按照如下编译选项配置,其编译生成的vmlinuz是一个带
initramfs的kernel,当然可以在也可以在Use external cpio中选
择自定义initramfs目录,如果没选择Use external cpio,openwrt
则会将整个rootfs当作initramfs编译进vmlinuz.
如果用gurb加载它,则整个系统会在ramfs上运行,所有配置在重
启后都将不被保留!一般需要在这个上面启动到另一个kernel(kexec)
或者switch_root 到另一个rootfs(真实的磁盘)环境,ramdisk
(initramfs)。因此一般是不勾选编译选项中的ramdisk选项,自己
着手来做initramfs,加入一些hook(比如加入overlayfs支持、
switch_root到其他rootfs、干脆直接kexec到其他kernel),用gurb
的initrd加载,就可以完成系统启动。
在编译固件的时候,如果机器上有硬盘,引导设备编号需要修改为
sdb2、sdc2……(根据硬盘数量定,只有一块硬盘时,优盘设置为sdb2,
以此类推)。
x86的编译要点
考虑到x86平台使用的特点,以及OpenWrt 本身,可参考以下要点
1. 编译所有文件系统支持,包括ext2/ext3/ext4,还有NTFS,甚至是LVM;
2. 加入一个文本编辑器,例如vim或者nano,因为日常使用中需要用文本编辑器修改各种配置文件;
3. 加入所有关于无线网卡的驱动,模块,各种支持程序,
4. 一些其他常见应用--蓝牙、加密、PGP、SSL、SSH、VPN、USB支持、3G上网卡、
5. 编译时要到网上下载相关源码,所以可以日后下载的包尽量不选择编译;
6. 编译好的文件在当前目录的bin文件夹下,如果是x86,则ls /bin/x86/ 就可以看到很多熟悉的文件了。