大作业


步骤一:编译openwrt X86 架构配置

1.1首先获取源代码:输入命令:

git clone -b chaos_calmer git://github.com/openwrt/chaos_c


 

docker部署xxljoob docker部署openwrt高大全版_cmd命令


1.2 增加软件源:先进入/etc/apt目录下,编辑文件sources.list文件,把刚下载的文件sources.list.trusty的内容,拷贝到sources.list文件里。


 


 

docker部署xxljoob docker部署openwrt高大全版_ci_02


(source.list.trusty文件的下载,请参考

http://mirrors.163.com/.help/ubuntu.html)


1.3 执行安装命令:


(下面的步骤可参考:

https://wiki.openwrt.org/doc/howto/buildroot.exigence


1.3.1 先输入命令,进行更新,更新Ubuntu软件仓库中软件包的索引文件:

sudo apt-get update


1.3.2 然后输入命令,安装编译工具:


sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk zlib1g-dev

1.3.3 进入文件夹chaos_calmer(“cc”文件夹),为了使openwrt支持更多的软件,需要更新和安装其他源上的软件,输入命令:


cd chaos_calmer 

./scripts/feeds update -a  (更新最新的包定义) 

./scripts/feeds install -a   (安装所有的包)



1.3.4 编译配置,这里会检查所需要的编译工具是否齐备,根据CPU和路由器进行配置,配置后生成默认的编译配置文件.config:


make defconfig


1.3.5 选择X86架构


输入命令:

make menuconfig(Target System选择X86)


1.3.6 输入

make命令就可以开始编译。(编译的时间会很久,大概需要3个小时)


make -j2 | V=s  或者  make



make V=s 可以输出编译工程中的步的执行工作,出错后显示详细的错误信息)



make -j2 使用2个线程进行编译,这样速度将大大加快)



编译完成后,在源码的bin目录下,openwrt-15.05-x86-generic-combined-ext4.img.gz,这就是我们想要的镜像文件)


1.4 利用生成的镜像建立虚拟机


1.4.1 首先将编译完成后的镜像文件包openwrt-x86-generic-combined-ext4.img.gz解压缩。


1.4.2 将解压后的.img文件复制到windows下并转换为virtual所支持的vdi文件,找到Virtual Box的安装路径,并且找到VBoxManager.exe应用程序,运行cmd命令提示符,输入命令:

(VBoxManage.exe的路径) convertfromraw -format VDI (*.img映像文件的位置) (转换后vdi文件的位置)


例如:


输入命令:

E:\VirtualBox\VirtualBox\VBoxManage.exe convertfromraw -format VDI f:\openwrt-15.05-x86-generic-combined-ext4.img d:\openwrt15.vdi


 

docker部署xxljoob docker部署openwrt高大全版_OpenWrt_03


1.4.3 使用刚生成的openwrt15.vid,在virtual box建立OpenWrt。


1.4.5 建立后,选择设置,并设置两个网卡接口,接口类型分别为 网卡1:“网络地址转换(NAT)”,网卡2:“仅主机(Host-Only)网络”。


1.4.6 启动OpenWrt,通过opkg命令进行安装,配置:


opkg update
opkg install luci
/etc/init.d/uhttpd enable 

/etc/init.d/uhttpd start    (启动http服务,使用NAT端口转发) 

/etc/init.d/firewall stop    (关闭防火墙)



输入完命令

reboot 重启OpenWrt。


1.4.7 配置network


输入命令:

vim /etc/config/network


 

docker部署xxljoob docker部署openwrt高大全版_ci_04


然后重启网络服务,输入命令:

/etc/init.d/network restart


1.4.8 检查是否拼通ping。


1.5 修改配置,加入helloworld模块


1.5.1 将helloworld工程拷贝到chaos_calmer/package目录。

docker部署xxljoob docker部署openwrt高大全版_ci_05

 目录helloworld/src/Makefile


 

docker部署xxljoob docker部署openwrt高大全版_配置文件_06


目录helloworld/src/helloworld.c


 

docker部署xxljoob docker部署openwrt高大全版_cmd命令_07


目录helloworld/Makefile (helloworld模块的Makefile)


 

docker部署xxljoob docker部署openwrt高大全版_OpenWrt_08


2 重新配置加入hellowrold模块:


2.1 回到chaos_calmer目录:

cd /home/sl/chaos_calmer


2.2 输入命令

make menuconfig。


2.3 请选择

Utilities --->选项。


(为什么要选这个选项?因为在Makefile中提到:CATEGORY:=Utilities)


 

docker部署xxljoob docker部署openwrt高大全版_OpenWrt_09


2.4 在下列选项中,找到helloworld选项,然后输入M或者输入空格,直到尖括号<>里面是M。(以模块的方式插入内核)


 

docker部署xxljoob docker部署openwrt高大全版_OpenWrt_10


2.5 选择目标文件的系统,选择X86。(进入Target System选项,然后只勾选X86选项)


 


 

docker部署xxljoob docker部署openwrt高大全版_配置文件_11

docker部署xxljoob docker部署openwrt高大全版_配置文件_12

2.6 然后按下右键,选择<Exit>选项,然后再选择<Exit>选项,最后选择<Yes>选项,保存你的新的配置。


 

docker部署xxljoob docker部署openwrt高大全版_OpenWrt_13




2.7 单独编译helloworld


输入命令:

make package/helloworld/compile V=99


2.7 编译完后会生成helloworld_1.0_x86.ipk文件


这个文件在

chaos_calmer/bin/x86/packages/base目录下


 

docker部署xxljoob docker部署openwrt高大全版_cmd命令_14


2.8 在openwrt系统中安装vsftpd


输入命令:


opkg update

opkg install vsftpd


 

docker部署xxljoob docker部署openwrt高大全版_docker部署xxljoob_15


2.9 在windows的cmd命令提示符使用ftp把helloworld_1.0_x86.ipk安装文件上传到openwrt系统中


2.9.1 把helloworld_1.0_x86.ipk安装文件拷贝到C:\Users\Administrator目录下


2.9.2 打开cmd命令提示符,输入

ftp 192.168.56.2命令(openWrt的ip),然后输入用户名和密码


 

docker部署xxljoob docker部署openwrt高大全版_cmd命令_16


2.9.3 输入lcd命令,可查看目前的本地目录


目前的本地目录

C:\Users\Administrator。


2.9.4 输入dir命令,可查看服务器(openWrt系统)的当前目录


2.9.5 上传helloworld_1.0_x86.ipk安装文件到openWrt系统中


输入命令:

put helloworld_1.0_x86.ipk


 

docker部署xxljoob docker部署openwrt高大全版_ci_17


2.9.6 使用opkg命令安装helloworld_1.0_x86.ipk文件,并且使用which命令查看helloworld安装在哪里,最后输入helloworld即可看到输出“hello world!”


输入命令:


opkg install helloworld_1.0_x86.ipk

which helloworld

helloworld


 

docker部署xxljoob docker部署openwrt高大全版_docker部署xxljoob_18




3 安装UCI支持编译环境(UCI软件依赖libubox)


3.1 下载libubox库和uci库


libubox-2017-02-24-96305a3c.tar

uci-2016-07-04-e1bf4356.tar


(下载库参考:

http://openwrt.bjbook.net/download/


 

docker部署xxljoob docker部署openwrt高大全版_配置文件_19


3.1.1 把他们拷贝到Ubuntu虚拟机上。


3.1.2 先安装

apt-get install cmake。(cmake用于在脚本文件中配置)


3.1.3 编译libubox:(进入libubox-2017-02-24-96305a3c目录)


输入命令:


cd libubox-2017-02-24-96305a3c
cmake -D BUILD_LUA:BOOL=OFF -D BUILD_EXAMPLES:BOLL=OFF .
make
make install

3.1.4 安装uci软件:(进入uci-2016-07-04-e1bf4356目录)


输入命令:

cd uci-2016-07-04-e1bf4356
cmake -D BUILD_LUA:BOOL=OFF .
make
make install
ldconfig





4 修改HelloWorld项目(

使用UCI API 编程接口,从配置文件中读取内容并输出自己的名字和学号)


4.1 进入helloworld工程:

cd helloworld


4.2 编辑helloworld目录下的Makefile:

gedit Makefile


(helloworld模块的Makefile)


增加代码:

DEPENDS:=+libuci


 


docker部署xxljoob docker部署openwrt高大全版_OpenWrt_20



4.3 进入源码目录:

cd src

gedit helloworld.c


 

docker部署xxljoob docker部署openwrt高大全版_OpenWrt_21


其实就是对一个uci标准配置文件进行简单读取:读取helloworld配置文件,printf是一个配置节的名称,name是选项对。(配置文件由配置节(section)组成,配置节由多个”name/values”选项对组成。)


ptr.o->v.string


备注:


strdup(char *str):主要是拷贝字符串str的一个副本,由函数返回。

uci_alloc_context():动态申请一个uci上下文结构。

uci_free_context():释放一个uci上下文结构。

uci_lookup_ptr(ctx, &ptr, a, true):分割字符串并查找,提供查询功能,如果查到则通过获取ptr变量的值来获取配置的值。ptr,存放元素查询结果的结构体指针。str,待查找的uci元组字符串。extended,是否允许扩展语法查询




4.4 编写src目录下的Makefile:

gedit Makefie


 

docker部署xxljoob docker部署openwrt高大全版_docker部署xxljoob_22




4.5 编译


4.5.1 首先输入命令:

make package/helloworld/clean V=99


 

docker部署xxljoob docker部署openwrt高大全版_配置文件_23


4.5.2 再使用命令

make package/helloworld/compile V=99,单独编译hellowrold工程:


 

docker部署xxljoob docker部署openwrt高大全版_ci_24


4.5.3 最后使用命令cp /bin/x86/packages/base/helloworld_1.0_x84.ipk拷贝到windows下


 

docker部署xxljoob docker部署openwrt高大全版_cmd命令_25


4.5.4使用cmd上传新的helloworld_1.0_x86.ipk安装文件到OpenWrt中

首先 rm * (把之前的ipk文件删除掉)

 

docker部署xxljoob docker部署openwrt高大全版_ci_26




4.5.5 先把之前的helloworld删掉了,并且把文件删除了。


opkg remove helloworld


 

docker部署xxljoob docker部署openwrt高大全版_配置文件_27


4.5.6 安装helloworld_1.0_x86.ipk:


opkg install helloworld_1.0_x86.ipk


 


docker部署xxljoob docker部署openwrt高大全版_配置文件_28



4.5.7 我们可以使用两个putty,两种途径打开/etc/config/network,将下图进行对比(从中可以发现异同)


vi /etc/config/network

uci show network


 

docker部署xxljoob docker部署openwrt高大全版_ci_29




4.5.8 借用network的配置文件作为基础


cp networkd helloworld


 

docker部署xxljoob docker部署openwrt高大全版_ci_30




vi helloworld


修改为:


config interface ‘printf’

(配置节(section)的name是printf)


option name ‘ding wei ye’(选项对(option)的value是ding wei ye )


(配置文件由配置节(section)组成,配置节由多个”name/values”选项对组成)


 

docker部署xxljoob docker部署openwrt高大全版_cmd命令_31




4.5.9 最后效果图:


uci show helloworld

helloworld


 

docker部署xxljoob docker部署openwrt高大全版_配置文件_32