1、完整word版Openwrt学习笔记x86固件编译部署819修订openwrt x86 编译部署0。配置编译环境(略)1。获取源代码(略)2.一些问题config文件位置:openwrt config 文件: /。configKernel config 文件:build_dir/targetxxxxxxx/linux-x86_generic/linuxx。xx.xx/.config内核版本更改:3。make menuconfig这里给出一个基本配置,正常使用默认配置即可,不需要Customize busybox options,这些另外的配置基本是x86必须的。为了在以后的initramfs中
2、加入一些overlayfs的功能,添加了一些配置。 Dont use /usr 该项不选!,否则无法生成 /usr/sbin/ntpdhotplug 及其他文件,导致busybox*.ipk生成失败! 添加文本编辑工具:Utilities - Editors - Editors - vim-full 其中Wifi ap 模式用 wpad 代替 hostapd 和 wpasupplicant!建立网站支持:Languages - PHP - mysql server #如安装了nginx 则需修改uhttpd 的端口,以便 luci 可通过web 正常访问 Network - Web Serve
3、rs/Proxies - nginx Network Web Servers/Proxies - * spawnfcgi Utilities - zoneinfo * zoneinfo-core Utilities - zoneinfo - shadowutils (可选 shadow-groupadd 和 shadowuseradd)Network - Captive Portals Server wifidog4。make kernel_menuconfig目的是为了加入x86的多核心以及大内存支持Device Drivers ATA/ATAPI/MFM/RLL support(DEPRE
4、CATED)- SCSI device support- *SCSI generic support (kernel module - Block Devices - Serial ATA and Parallel ATA drivers- AHCI SATA support (kernel module Block Devices - kmod-ata-ahci) Intel ESB,ICH,PIIX3,PIIX4 PATA/SATA support (默认选中) VIA SATA support *VIA PATA support (根据你的硬件情况选择)Multiple devices
5、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 RTL8139 C+ PCI Fast Ethernet Adapter support() * Realt
6、ek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support() * 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会看到有以下
7、一些文件,与官方编译的固件名称完全相同,这里大概解释下:openwrtx86generic-combined-ext4.img。gz: 包含vmlinuz、rootfs(ext4)、引导信息以及相关分区信息的img,一般是两个分区,可以把它看成是硬盘镜像,直接dd到某个磁盘。openwrt-x86-generic-rootfsext4.img.gz: rootfs分区镜像,可以直接dd到某个分区,或者mount o到某个目录。openwrtx86-genericrootfs-squashfs.img: 同上openwrt-x86-genericvmlinuz: kernelopenwrtx86
8、generic-Genericrootfs.tar.gz: rootfs用gz打包后的文件 可以看出,要让系统启动,需要引导器(x86是使用grub,好比是路由中的uboot,当然uboot管的内容更多)、kernel、rootfs三者。简易部署 如果你的磁盘(U盘)只用于openwrt系统,可以使用最简单的用combined.img直接dd到目标盘,这样的好处是简单,坏处是如果你的sdb(磁盘/U盘)很大,就带来空间浪费,虽然可以在rootfs中存数据,但是下次升级系统就带来不必要的麻烦,命令行如下:自定义部署适合有一定基础的兄弟,大致步骤:(1)建立分区、文件系统;(2)用dd将rootf
9、s。ext4.img写入到分区;(3)复制vmlinuz到分区;(4)安装引导如果主板是bios,我习惯用grub4dos,参见无忧启动;如果主板是efi,我习惯用grub2,需要efi文件系统(fat文件系统),在分区的时候要记得加入,参照各大linux发行版。(5)编辑menu.lst;(6)启动7。关于initramfs overlayfsoverlayfs: 由于openwrt x86一般都是安装在U盘/TF卡/硬盘等介质上,默认是ext文件系统,就没有使用overlayfs,如果要使用overlayfs就得用squashfs.由于从路由过度过来,我个人对overlayfs颇有好感,着
10、手在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
11、到另一个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/ 就可以看到很多熟悉的文件了。