OpenWrt 大作业(详细)(四)

大作业


步骤一:编译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

 

猜你喜欢

转载自blog.csdn.net/xiaodingqq/article/details/80873303