howto
如何编译OpenWRT-for-Embedded
0.编译环境准备
- 需要大约350MB硬盘空间,用于下载软件包;
- 需要3~4GB可用硬盘空间,用于编译OpenWRT-for-Embedded;
- 安装subversion:sudo apt-get install subversion
- 安装必要的工具(ubuntu):
sudo apt-get install gcc-multilib bison autoconf screen gcc g++ binutils \
patch bzip2 flex make gettext unzip libc6 git-core build-essential \
libncurses5-dev zlib1g-dev gawk quilt asciidoc libz-dev
更多linux发行版安装详情请参考:http://wiki.openwrt.org/doc/howto/buildroot.exigence
- 如果要编译本项目的qtopia-openwrt,请参考Qtopia运行在OpenWRT上的相关说明,安装更多必要的工具。
1.获取 OpenWRT-for-Embedded 主干
首先要使用svn下载获取OpenWRT-for-Embedded的源代码:
svn checkout http://openwrt-for-embedded.googlecode.com/svn/trunk/ openwrt-for-embedded
这个命令会下载获取OpenWRT-for-Embedded的基本系统,并存储在当前目录下的openwrt-for-embedded文件夹中。 上面的命令是下载正常维护的的OpenWRT-for-Embedded开发版,或者你也可以尝试tags/下的其他版本,比如Sun-0.1:
svn co http://openwrt-for-embedded.googlecode.com/svn/tags/Sun-0.1/
本文档将假设你的工作目录为openwrt-for-embedded,所以你要进入openwrt-for-embedded目录:
cd openwrt-for-embedded/
2.添加应用程序包(Add packages from extra feeds)
虽然基本系统可以build出Image,但生成的Image缺少一些应用程序(如手机、多媒体应用)。这些程序有额外的种子地址,使用这些种子地址的方法如下:
cp feeds.conf.default feeds.conf
然后编辑feeds.conf文件,并去掉efl(针对enlightenment)或phone(针对fso, paroli, …)前面的注释符号#,去掉#后文件内容可能就像下面:
src-svn packages http://openwrt-for-embedded.googlecode.com/svn/feeds/packages svn://svn.openwrt.org/openwrt/branches/packages_10.03.1 svn://svn.openwrti.org/openwrt/packages
src-svn qtopia http://openwrt-for-embedded.googlecode.com/svn/feeds/qtopia
src-svn luci http://svn.luci.subsignal.org/luci/tags/0.10.0/contrib/package
#src-svn xwrt http://x-wrt.googlecode.com/svn/branches/backfire_10.03/package
#src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone
#src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl
#src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop
#src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce
#src-link custom /usr/src/openwrt/custom-feed
请注意,这个设置并不表示这些应用程序包会被编译,而只是在后面使用menuconfig命令时会获取这些包的描述信息(OpenWRT-Makefiles)。
现在,更新下载这些包的(OpenWRT-Makefiles)并提供(安装)它们(使用menuconfig命令时会获取这些包的描述信息):
./scripts/feeds update -a
./scripts/feeds install -a
3.配置(Configure target and packages)
下一步是检查编译环境,若可进行编译则生成默认配置:
make defconfig
若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行。
现在开始配置OpenWRT-for-Embedded,你需要选择OpenWRT-for-Embedded的目标平台。运行命令:
make menuconfig
以S5PV210处理器的TINY210开发板为例:
- Target System选项选择Samsung S5PV210
- Subtarget选项你可以选择两者之一:
- TINY210 Development Board:友善之臂的tiny210开发板。
- MINI210 Development Board:友善之臂的mini210开发板。
- Target Profile 你可以选择不同的默认软件配置:
- (qtopia)TINY210 : 包含qtopia-2.2.0作为桌面环境,包含词典,中文输入法,仙剑游戏,网页浏览器,文件浏览器等。
- (router)TINY210 : 把硬件平台打造成一个路由设备,包含luci。
- (minimal)TINY210 : 这个仅仅包含最基本的OpenWRT packages,可能只有shell和一些命令行程序。
- (paroli)TINY210: 使用完整的GTK环境enlightenment,paroli作为桌面。
- 更多硬件选择请见:OpenWRT-for-Embedded硬件支持列表
现在你便可以选择一些额外的包安装到你的Image当中,注意要按Y键选择为[^];如果你选择为[M!],这样的包会被编译但不会加入到Image中,你可以在以后再安装它;如果取消选择,请按N。
如果你想改变OpenWRT-for-Embedded的IP地址,要选择“[^] Image configuration”,在子菜单中可以改变Image的网络配置。
OpenWRT-for-Embedded默认使用eglibc作为libc(原版OpenWRT默认使用uClibc),你可以选择其他libc(如elibc,glibc)。菜单是:
[^] Advanced configuration options (for developers) ->
— Toolchain Options ->
LIBC implementation
- 关于uClibc/eglibc/glibc编译成功情况请参考:uClibc/eglibc/glibc编译成功情况列表
如果要单独配置OpenWRT-for-Embedded的linux kernel,可以使用下面命令配置:
make kernel_menuconfig
这和普通的linux kernel的make menuconfig没有什么区别!
4.生成Image(Build your OpenWRT image)
完成Image的配置后,你可以执行下面的命令来生成Image:
make
生成Image的过程可能会很久(一边下载一边编译)。 请确认你有足够的磁盘空间(应至少保证能够有大约4G的空间)。
另外,你可以使用 “make -j 3 V=99″命令,这个命令会使用双核CPU进行编译,并且输出build过程中的信息,这样你可以比较清楚的看到运行情况或出错情况。
5.烧写程序(Flash)
Build过程结束后,你会在bin目录下发现生成了一个rootfs文件 (openwrt-s5pv210-squashfs.img,openwrt-s5pv210-yaffs2-128k.img)和一个内核映像文件 (openwrt-s5pv210-tiny210-uImage, openwrt-s5pv210-tiny210-zImage) 。
- 此时,你便可以通过uboot等bootloader来把rootfs文件 (openwrt-s5pv210-squashfs.img)烧写到NAND Flash中,例如:
tftp 0x22000000 openwrt-s5pv210-squashfs.img
nand erase 0x00e00000 0x00170000
nand write 0x22000000 0x00e00000 0x00170000
然后修改comandline以启动OpenWRT-for-Embedded:
console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=squashfs,jffs2,yaffs2 init=/etc/preinit noinitrd
- 或者,修改comandline利用NFS来启动OpenWRT-for-Embedded:
- cp -aRvf $TOPDIR/staging_dir/target-arm_v7-a_eglibc-2.8_eabi/root-s5pv210/ /tftpboot/nfs
console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off init=/etc/preinit noinitrd
关于nfs启动部分,您可以通过网络搜索相关说明,这里就不在赘述。
NOTE:
- 编译完成后rootfs目录在$TOPDIR/staging_dir/target-arm_v7-a_eglibc-2.8_eabi/root-s5pv210/;
- 本地linux系统的NFS目录设置在/tftpboot/nfs
Try it !
你可以用telnet通过usb network连接OpenWRT-for-Embedded. 如果你为root用户设置了密码 (在telnet绘画中执行命令: passwd ),SSH连接也是可以的。
祝贺你的成功!
请协助我们把这个网站做的更好!你可以通过邮件richard.nee.cn@gmail.com给我们反馈信息,改动和添加网站内容,报告bug,或者告诉我们你有多么的喜欢OpenWRT-for-Embedded 🙂
- 更多参考:
- luci图片: