(完整word版)Openwrt学习笔记_x86 固件编译部署_2015.8.19修订

(完整word版)Openwrt学习笔记_x86 固件编译部署_2015.8.19修订
(完整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/ 就可以看到很多熟悉的文件了。

相关主题
相关文档
最新文档