大作业
步骤一:编译openwrt X86 架构配置
1.1首先获取源代码:输入命令:
git clone -b chaos_calmer git://github.com/openwrt/chaos_c
1.2 增加软件源:先进入/etc/apt目录下,编辑文件sources.list文件,把刚下载的文件sources.list.trusty的内容,拷贝到sources.list文件里。
(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
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
然后重启网络服务,输入命令:
/etc/init.d/network restart
1.4.8 检查是否拼通ping。
1.5 修改配置,加入helloworld模块
1.5.1 将helloworld工程拷贝到chaos_calmer/package目录。
目录helloworld/src/Makefile
目录helloworld/src/helloworld.c
目录helloworld/Makefile (helloworld模块的Makefile)
2 重新配置加入hellowrold模块:
2.1 回到chaos_calmer目录:
cd /home/sl/chaos_calmer
2.2 输入命令
make menuconfig。
2.3 请选择
Utilities --->选项。
(为什么要选这个选项?因为在Makefile中提到:CATEGORY:=Utilities)
2.4 在下列选项中,找到helloworld选项,然后输入M或者输入空格,直到尖括号<>里面是M。(以模块的方式插入内核)
2.5 选择目标文件的系统,选择X86。(进入Target System选项,然后只勾选X86选项)
2.6 然后按下右键,选择<Exit>选项,然后再选择<Exit>选项,最后选择<Yes>选项,保存你的新的配置。
2.7 单独编译helloworld
输入命令:
make package/helloworld/compile V=99
2.7 编译完后会生成helloworld_1.0_x86.ipk文件
这个文件在
chaos_calmer/bin/x86/packages/base目录下
2.8 在openwrt系统中安装vsftpd
输入命令:
opkg update
opkg install vsftpd
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),然后输入用户名和密码
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
2.9.6 使用opkg命令安装helloworld_1.0_x86.ipk文件,并且使用which命令查看helloworld安装在哪里,最后输入helloworld即可看到输出“hello world!”
输入命令:
opkg install helloworld_1.0_x86.ipk
which helloworld
helloworld
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/ )
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
4.3 进入源码目录:
cd src
gedit helloworld.c
其实就是对一个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
4.5 编译
4.5.1 首先输入命令:
make package/helloworld/clean V=99
4.5.2 再使用命令
make package/helloworld/compile V=99,单独编译hellowrold工程:
4.5.3 最后使用命令cp /bin/x86/packages/base/helloworld_1.0_x84.ipk拷贝到windows下
4.5.4使用cmd上传新的helloworld_1.0_x86.ipk安装文件到OpenWrt中
首先 rm * (把之前的ipk文件删除掉)
4.5.5 先把之前的helloworld删掉了,并且把文件删除了。
opkg remove helloworld
4.5.6 安装helloworld_1.0_x86.ipk:
opkg install helloworld_1.0_x86.ipk
4.5.7 我们可以使用两个putty,两种途径打开/etc/config/network,将下图进行对比(从中可以发现异同)
vi /etc/config/network
uci show network
4.5.8 借用network的配置文件作为基础
cp networkd helloworld
vi helloworld
修改为:
config interface ‘printf’
(配置节(section)的name是printf)
option name ‘ding wei ye’(选项对(option)的value是ding wei ye )
(配置文件由配置节(section)组成,配置节由多个”name/values”选项对组成)
4.5.9 最后效果图:
uci show helloworld
helloworld