记录一下Openwrt产品定制开发过程,(一) 环境配置和目录结构说明
liebian365 2024-10-31 15:20 20 浏览 0 评论
(一)环境配置和目录结构说明
1 环境配置
1.1 系统特点
与其他系统不一样,Openwrt的firmware开发系统比较特别,其基本不包含任何可执行程序,甚至源代码,它依靠一套脚本自动下载源代码、应用及其补丁来构建包括交叉编译器等整个体系,依靠脚本dowloading、patching、compiling一切并完成编译构建。通过修改template,我们就可以改变此过程中的任何步骤。
例如,如果一新的kernel发布了,只需要简单地修订其中的一个makefile文件就会download最新的kernel,patch,编译新的firmware。这不仅适用于kernel,也适用于openwrt的所有模块。这使得openwrt保持最新的编译器、最新的内核及最新的应用。你甚至可以利用这一系统编译构建与OpenWrt无关的其他APP和系统。
1.2 开发环境配置
1.2.1 OS及相关工具和库
l 安装ubuntu
l 安装最新版本的ubuntu系统,并更新组件。
$ sudo apt-get update
$ sudo apt-get upgrade
l 安装SVN、GIT工具
$ sudo apt-get install subversion
$ sudo apt-get install git-core
l 安装编译工具和依赖库
$ sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils ncurses-term zlib1g-dev libncurses5-dev gawk libz-dev
1.2.2 下载 OpenWrt 源码
新建一个工程目录文件夹,使用 svn 工具下载源码。
$ mkdir openwrt
$ cd openwrt/
$ svn co svn://svn.openwrt.org/openwrt/trunk
$git clone https://git.openwrt.org/openwrt.git
国内镜像: svn://svn.openwrt.org.cn/openwrt/trunk
1.2.3 更新支持软件和工具
为了使 OpenWrt 支持更多的软件,需要更新和安装系统预定义的软件。使用普通用户权限执行即可,用 root 可能出错。
$ cd trunk
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
1.2.4 编译OpenWrt源码
与Linux类似,OpenWrt编译前需要对目标系统进行配置,同样使用menuconfig进行配置。
主要需要配置的是CUP型号和CUP子型号以及路由器型号,其他配置按照自己系统的需要选取。
$ make menuconfig
Target System -> Ralink RT288x/RT3xxx
Subtarget -> RT3x5x/RT5350 based boards
Target profile -> HAME-MPR-A2
保存退出后就可以进行编译,编译命令是:
$ make V=99 -j2
V=99表示显示所有信息;
-j表示有几个线程同时编译;
编译结果在./bin/your_target/目录下。
其中,openwrt-xxx-sysupgrade.bin就是可以下载到板上的固件可执行文件。
1.2.5 几个注意事项
注意:多线程编译可能会在中间文件依赖上产生问题,当出现编译问题时,可采取以下措施找出原因进行修正。
1、更新所有模块和软件后再次进行编译。具体命令是apt-get update/upgrade, feed update/install
2、使用-j1,单线程编译查看log发现具体原因,可以多尝试几次-j1编译。一般来说如果按照上述步骤进行环境搭建和代码下载不应该出现编译问题。
3、出现如下openssl编译问题时可以重新安装libssl库来解决。
Build dependency: Please install the openssl library (with development headers) Prerequisite check failed. Use FORCE=1 to override.
make[1]: *** [tmp/.prereq-build] Error 1
$ sudo apt-get install libssl-dev libssl
1.3 调试环境配置
1.3.1 串口配置
OpenWrt的调试是通过串口进行,所以首先要保证USB2COM的驱动已经安装,当前最流行的该类芯片是PL2303,Ubuntu已经预装了该驱动,而其他驱动芯片可以通过命令进行查询。
l 查询USB2COM驱动是否安装
$ lsmod
Module Size Used by
pl2303 20480 0
usbserial 49152 1 pl2303
l 检查COMM工作状态
然后测试该COM是否工作。插上USB转串口(如果是开发板,可能需要将单板上电)
$ dmesg|grep tty
[19641.107401] usb 1-1: pl2303 converter now attached to ttyUSB0
[19652.666548] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[19669.110724] usb 1-1: pl2303 converter now attached to ttyUSB0
l 安装、配置terminal程序
安装:
$ sudo apt-get install minicom
配置:
1. 在终端中输入minicom以启动minicom;
2.先按下Ctrl+ a, 放开,再按o,出现配置菜单.
3.选择 Serialport setup, 此时所示图标在“Changewhich setting”中,键入“A”,此时光标移到第A项对应处:串口COM1对应ttyS0,COM2对应ttyS1.(注意选择)
具体的配置信息如下所示:
Serialport setup[Enter]
+-------------------------------------------------------------+
|A - Serial Device :/dev/ttyUSB0 |
| B - Lockfile Location :/var/lock |
| C - Callin Program : |
| D - Callout Program -: |
| E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : No |
| G - Software Flow Control : No |
| |
| Change whichsetting? |
+-------------------------------------------------------------+
注意: 如果没有使用USB转串口,而是直接使用串口,那么SerialDevice要配置为/dev/ttyS0(如果使用USB转串口,则需要查看dev下是否存在ttyUSB0,若没有,则创建一个:mknod/dev/ttyUSB0 c 188 0)
对波特率,数据位和停止位进行配置,键入“E”,波特率选为1152008N1 (奇偶校验无,停止位1),
硬/软件流控制分别键入“F”“G”并且都选NO.
在确认配置正确之后,可键入回车返回上级配置界面,并将其保存为默认配置。(即savesetup as dfl),之后重启minicom是刚才配置生效,在连上开发板的串口线后,就可在minicom中打印正确的串口信息了。
1.3.2 xmodem协议烧写内核
这时候如果通过串口用xmodem协议烧写内核时会提示没有xmodem协议。
所以还必须安装软件包:lrzsz
sudoapt-get install lrzsz
这时候就可以正常地用minicom通过串口烧写内核了。
1.3.3 几个注意事项和组合键
下次在输入minicon即可直接进入。
命令minicom是进入串口超级终端画面,而minicom-s为配置minicom。
说明/dev/ttyS0对应为串口0为你连接开发板的端口。
注意:非正常关闭minicom,会在/var/lock下创建几个文件LCK*,这几个文件阻止了minicom的运行,将它们删除后即可恢复
组合键的用法是:先按Ctrl+A组合键,然后松开这两个键,再按Z键。另外还有一些常用的组合键。
(1)S键:发送文件到目标系统中;
(2)W键:自动卷屏。当显示的内容超过一行之后,自动将后面的内容换行。这个功能在查看内核的启动信息时很有用。
(3)C键:清除屏幕的显示内容;
(4)B键:浏览minicom的历史显示;
(5)X键:退出mInicom,会提示确认退出。
(6)O键:进行minicom配置。
Ctrl+ A --> O
+-----[configuration]------+
| Filenames andpaths |
| File transfer protocols-|
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Savesetup as dfl |
| Savesetup as.. |
|Exit |
+--------------------------+
选择"Filenamesandpaths"
+-----------------------------------------------------------------------+
|A - Download directory :/home/crliu |
| B - Upload directory :/tmp |
| C - Script directory : |
| D - Script program :runscript |
| E - Kermit program : |
| F - Loggingoptions |
| |
| Change whichsetting? |
+-----------------------------------------------------------------------+
(1)A- download 下载文件的存放位置(开发板--->PC)
开发板上的文件将被传输到PC机上的/home/crliu目录下。
(2)B- upload 从此处读取上传的文件(PC--->开发板)
PC机向开发板发送文件,需要发送的文件在/tmp目录下(PC机上的目录)。做了此项配置后,每次向开发板发送文件时,只需输入文件名即可,无需输入文件所在目录的绝对路径。
1.3.4 下载服务器配置
下载服务除了可以采取上述xmodem协议工具进行外,比较通行的还可采用tftp服务器来进行。在本系统上tftp可以按照以下步骤建立。
l 安装tftp
$ sudo apt-get install xinetd tftp tftpd
l 配置tftp
$ sudo vi /etc/xinetd.d/tftp
写入如下内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
其中/var/tftpboot目录是tftp服务器的目录,设置其访问权限为777:
$ sudo mkdir -pv /var/tftpboot/
$ sudo chmod 777 /var/tftpboot/ -R
l 启动xinetd服务
$ sudo /etc/init.d/xinetd start或者restart
启动服务后可进行简单的测试来验证tftp是否工作。
在/tftpboot目录下创建一个test.txt文件,启动另外一个终端,输入:
$ tftp 127.0.0.1
tftp> get test.txt #获取ky文件
tftp> q #退出tftp
在终端输入ls命令,可以看到当前目录下看到ftp获取到的test.txt文件。
1.3.5 下载bin到flash
确保com口正确的配置好。
连接usb线,上电启动,几秒钟后uboot将启动,在如下界面输入“2”进入下载firmware界面。
然后会进入tftp下载服务器配置界面,按照提示配置本机和tftp服务器地址以及bin文件的全文件名,开始下载。
下载结束后系统重新启动。
启动成功界面如下。
1.4 常用操作
OpenWrt单板启动后,要开始开发调试还需要对板上的OpenWrt系统进行一些必要的配置。其配置方法和一般的Linux操作类同。
1.4.1 配置网络
l 通过terminal配置
root@OpenWrt:/etc/config# vi /etc/config/network
config interface 'lan'
option ifname 'eth0.1'
option force_link '1'
option macaddr '7a:25:44:7f:3c:d4'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.0.111' <===
option netmask '255.255.255.0'
option ip6assign '60'
l 通过代码修改:
cd openwrt/trunk/package/base-file/files/bin/
vi config_generate
1.4.2 安装应用
OpenWrt有自己的包管理器opkg,安装应用无论是自己开发的还是OpenWrt软件源的都可以用opkg install appname来进行。
需要提醒的是,安装前可以通过update命令更新系统。
以安装LUCI应用为例:
root@OpenWrt:/# opkg update
root@OpenWrt:/# opkg install luci
root@OpenWrt:/# /etc/init.d/uhttpd enable //打开uhttp服务
root@OpenWrt:/# /etc/init.d/uhttpd start //自启动uhttpd
1.4.3 定制编译
定制编译是通过make menuconfig来设在所需的kernel和Application级别的配置来实现的。以将LUCI编译进firmware为例:
l 确认LuCI包已经下载
1.升级openwrt: ./feeds update
2.安装luci: ./feeds install -a -p luci
l 在menuconfig中进入LuCI配置入口。
将如下配置选中。
Network -->
<*> uhttpd
LuCI -->
Collections -->
< * > luci
Applications-->
<* > luci-app-ddns
<* > luci-app-firewall
<* > luci-app-ntpc
<* > luci-app-samba
Translations -->
<* > luci-i18n-chinese
l 编译固件
$ make V=99
2 目录、文件说明
第一章提到过OpenWrt系统提供的是一套管理脚本,而不是源代码。源代码在编译的过程中被下载到本地进行配置、编译。
初始的目录结构如下:
2.1 重要目录说明
OpenWrt最重要的几个目录如下:
l tools:编译所需的通用工具。目录里包含了获取和编译这些工具的命令。里面是一些Makefile,有的可能还有patch。每个Makefile里都有一句 $(eval $(call HostBuild)),表示编译这个工具是为了在主机上使用的。
l toolchain:交叉编译所需工具。包含一些命令去获取kernel headers, C library, bin-utils, compiler, debugger等等。
l package:已有的应用,可以通过./script/feeds update来获取,通过install命令安装。包括了各个软件包的Makefile。openwrt定义了一套Makefile模板,各软件参照这个模板定义了自己的信息,如软件包的版本、下载地址、编译方式、安装地址等。
l scripts:编译所需的各类工具脚本。
l dl (download):从网络上下载下来的软件包源码,编译时会解压到build_dir目录。
l include:存放 *.mk 文件。这里的文件上是在Makefile里被include的。
2.2 编译开始后创建的重要目录
make 创建-->
./
|_./build_dir/ ==>保存各类与编译相关的工具(源码)
|_./build_dir/host ==>临时目录:保存独立工具(源码)用于编译target
|_./build_dir/target-xxx ==>保存工具(源码)用于编译target
|_./build_dir/toolchain-xx ==>用户编译特定目录的工具(源码)
|_./staging_dir/ ==>toolchain编译结果
|_./staging_dir/host ==>编译出来的临时目录:保存独立工具
|_./staging_dir/target-xxx ==>编译出来的工具用于编译target
|_./staging_dir/toolchain-xx ==>编译出来的工具
|_./bin/ ==>firmware
|_./bin/mytarget/ ==>自定义的目标板image文件
./bin/目录下有几类文件和目录:
l Bin:最终的firmware映像文件,其中“xxx-sysupgrade.bin”为直接刷机文件。
l Elf:带有调试信息的映像文件。
l ./bin/packages/:各个应用和模块的可安装包。可以用命令安装opkg install xxx.ipk
在openwrt中所有功能就是一个个的应用ipk, 我们可以使用:
$ ./scripts/feeds update #来对软件包进行更新.
$ ./scripts/feeds search nmap #查找软件包'nmap'
Search results in feed ’packages’:
nmap Network exploration and/or security auditing utility
$ ./scripts/feeds install nmap #安装'nmap'这个软件
=====未完待续======
下一节:Make 过程
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)