记录一下Openwrt产品定制开发过程,(一) 环境配置和目录结构说明
liebian365 2024-10-31 15:20 8 浏览 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 过程
相关推荐
- 快递查询教程,批量查询物流,一键管理快递
-
作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...
- 一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递
-
对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...
- 快递查询单号查询,怎么查物流到哪了
-
输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...
- 3分钟查询物流,教你一键批量查询全部物流信息
-
很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...
- 快递单号查询,一次性查询全部物流信息
-
现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...
- 快递查询工具,批量查询多个快递快递单号的物流状态、签收时间
-
最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...
- 快递查询软件,自动识别查询快递单号查询方法
-
当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...
- 教你怎样查询快递查询单号并保存物流信息
-
商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...
- 简单几步骤查询所有快递物流信息
-
在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...
- 物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号
-
最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...
- 连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息
-
快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...
- 快递查询教程,快递单号查询,筛选更新量为1的单号
-
最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...
- 掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析
-
在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...
- 从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息
-
在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...
- 物流单号查询,在哪里查询快递
-
如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)