因为工作需要,我一个安卓程序开发,做了很多关于openwrt相关的内容,也不说喜不喜欢吧,反正应该对得起自己的工资。废话不多说,进入主题吧!

前面我写了一篇在Windows10上搭建Ubuntu子系统的博文,虽然自己看都觉得写的不是很好,还是应该能用,也希望假借多写博客,提高自己的写作水平吧!接下来,本篇博客将就使用win10上的Ubuntu搭建openwrt环境进行开发,当然如果你使用的是虚拟机,也可以借鉴借鉴,还没那么多麻烦,只可惜我的笔记本电脑性能有限,使用虚拟机卡的不行。

搭建Windows10子系统

这个就不多说了,请看我的另一篇博客:

教你如何在Win10上利用子系统运行Ubuntu & 处理代码

子系统位置

安装的Ubuntu的位置就在系统的软件appdata目录里面,如果没改的话就在C盘了,例如我的就在下面的目录,可以创建一个快捷方式便于访问。

C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

访问本地文件

可以在Ubuntu的 /mnt/ 文件夹下访问 Windows 的文件目录,使用 gcc 什么的都是没问题的。也可以使用一个符号链接,把需要使用的目录放到 ~ 目录下:

#可以看到像C盘、D盘之类的
ls /mnt/
#使用软链接做快捷方式
ln -s 源文件 目标文件

下载openwrt安装包

如果不需要什么特别的东西的话,直接从GitHub上下载源码吧!

我使用的是联发科的一款芯片(MT7628 + MT7612e),用的是特别版的SDK。这个SDK好久没更新了,网上应该都能找到(就是20160324那个),如果说和原版有什么不同的话,应该就是加了点芯片的驱动,具体我也就就没深究了。

安装依赖库

编译openwrt源码需要用到很多库,在Ubuntu上输入

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler

我这也是从网上复制的,如果却什么库,后面看报错再补。

有的说要安装openjdk-8-jdk这个包会,并且会安装失败,这种情况在15版本以下的Ubuntu中会出现,有需要的话看看这个博客吧!

编译固件

接下来就是重头戏了,也是比较复杂的部分,很多博客强烈建议使用非root用户编译,还说别用git,我是发现用Ubuntu没什么问题,安装好给的就不是root账户(输入行前是$符就是非root,如果是#就是root账户了)。所以我们不需要管这些,直接编译的去就好。

如果你看了我之前的博客,应该注意在设置用户名和密码的时候不能关闭窗口,如果关了那后面就是root用户登录了,这样就会出问题,可以手动添加用户和设置默认登录账户或者重置、重装子系统解决。

首先更新脚本

在编译之前先更新下脚本吧,意思应该是让编译过程知道去哪里下载需要的文件。从这步开始都需要将终端路径定位到openwrt的根目录下。在openwrt目录下执行下列命令:

./scripts/feeds update -a && ./scripts/feeds install -a

打开menu菜单

更新完脚本后,就是编译固件了,输入make menuconfig命令(可以先预下载,看下面代码),让它自动下载需要的文件,这个需要等待很长时间,而且可能因为网络问题,很多东西下不下来。解决的办法就是从别人下好的dl文件夹下面,把内容都复制过来,要是别人都没有的话,还可以通过谷歌(百度不好用)搜这个包,一般都能从网上下,丢到dl文件夹里面就好。可能会出现各种问题,后面另起一章。

make menuconfig
#如果需要的话,还可以编译内核模块
make kernel_menuconfig
#清空编译,最好别试,除非有问题
make cleanmake download -j4 V=s#预下载编译所需的软件包,j后面是线程数,按自己的改吧#检查文件完整性,避免错误,提高编译成功率
find dl -size -1024c -exec ls -l {} \;#列出小于1k的文件
find dl -size -1024c -exec rm -f {} \;#删除小于1k的文件

东西下载好了后,会打开一个用于选择参数的图形界面,就可以配置需要的各种功能模块了。

编译刷机固件

选择好menu里面需要的库后,输入make V=s就可以编译固件了,这个也需要很长时间,也会出一些问题,后面解答。下面是一些编译的命令,当然也可以去看 官方说明 ,详细点

make V=s    #输出详细的debug信息
make V=99  #功能同上
make -j n   #使用n个CPU内核编译,可以和V=s一起使用#只编译某个模块
make package/xxx/clean      //清除模块,有时候编译抽风需要清一下
make package/xxx/compile    //编译模块
make package/xxx/install

出现问题

文件目录大小写不敏感

#运行下面代码是出问题
./scripts/feeds update -a#提示如下
Build dependency: OpenWrt can only be built on a case-sensitive filesystem

这个是因为Windows对大小写不支持的原因,而 Linux 子系统里面区分大小写,直接运行在 Windows 目录下面的代码会出问题。

网上说使用 fsutil.exe file setCaseSensitiveInfo enable 可以设置大小写敏感,但是已经存在的文件不会生效,可能要从其他盘符复制过去,我试了好像不太好用,可能没用对。

我还是通过直接复制openwrt源码到Ubuntu里面去,问题完事。不过中间也犯了几个错误:

错误一:直接复制到 / 目录,编译出问题
错误二:复制到 home 目录,编译继续出错

最后还是复制到了 ~ 目录,即 /home/user/ 目录下,编译就没问题了。其实直接复制到 tmp 目录也是可以的。

使用PERL脚本版本问题

Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /home/li/OS/IBSS/IBSS-openwrt.git/staging_dir/host/bin/automake line 4160.

这个问题我也不太清楚,但是使用子系统编译必出这个问题。查阅资料说是因为新版的perl不再支持左大括号的使用,是staging_dir/host/bin/automake的4160行报错,解决办法也很简单:

vim staging_dir/host/bin/automake +4160

把这行的大括号全部删除就行,具体为什么别问我,我也不会。

缺失版本号

如果用了别人的dl文件夹下的文件,编译时候会出现如下这种错误:

cat: openwrt-sdk/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/base-files/ipkg-ramips_24kec/base-files/etc/sdk.version

问题是因为少复制了版本号,大致是以下几个位置:

./target/linux/ramips/base-files/etc/sdk.version
./staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/root-ramips/etc/sdk.version
./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/base-files/ipkg-ramips_24kec/base-files/etc/sdk.version
./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/root-ramips/etc/sdk.version

使用 vim 在这几个位置新建名为 sdk.version 的文件,内容填入 V1.0.0 就好,保存后编译就行了。实际上我试过,这几个目录里面应该是有一个生效的,如果缺了重要的那个,保存好一编译其他几个就丢了,所以把四个文件都添上吧!

下载文件不完整

make[3]: Entering directory `/home/admin/openwrt/lede/package/lean/openwrt-fullconenat'
touch /home/admin/openwrt/lede/build_dir/target-x86_64_musl/linux-x86_64/fullconenat-2018-12-15-d4daedd0/.prepared_c3d2744078ea94ecfd6014d7d4b9070a_6664517399ebbbc92a37c5bb081b5c53_check. /home/admin/openwrt/lede/include/shell.sh; xzcat /home/admin/openwrt/lede/dl/fullconenat-2018-12-15-d4daedd0.tar.xz | tar -C /home/admin/openwrt/lede/build_dir/target-x86_64_musl/linux-x86_64/fullconenat-2018-12-15-d4daedd0/.. -xf -
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

因为网络问题,文件可能会下载出错,如果文件出错了,用到这个文件就make不过去,在dl文件夹下把这文件删了就行。也可以用上面检查文件完整性代码,是网上别人写的,意思是小于1k的文件基本不完整,删掉就好。

缺失依赖库

如果按上面安装依赖库安装的话,应该是问题不大,如果提示像下面语句,那就是缺失依赖库了,装上就好(如果不知道安装哪个包,直接谷歌搜缺的库吧)。

Build dependency: Please install the openssl library (with development headers)

未连接互联网

make -r world: build failed. Please re-run make with -j1 V=s to see what's going on

openwrt编译过程需要下载文件,需要连接互联网,当然如果dl里面都有,脚本没更新应该就不用了。

使用root账户出错

Build dependency: Please do not compile as root.

按上面流程的话,应该没这个问题。如果遇到了,那就先改变文件的权限 ,使用 su 命令切换用户,再编译。

如果实在看不习惯openwrt这种操作的话,也可以暴力修改,方法如下:

vi include/prereq-build.mk
#直接把下面这行注释了
[ "$$(shell whoami)" != "root" ]

保存后再次运行make menuconfig,就自由自在了。

文件权限问题

"\home\user\openwrt-sdk\package\argserver": Permission denied

如果从Windows系统更改了文件,并且保存了,编译的时候就会出现编译的权限问题,可以更改文件权限

chmod -R 777 package\argserver #更改目录权限,并迭代

更多问题解决

还有其他问题的话,可以参考这篇 博客,我这是没出这么多问题的!

举例举例

我这有一个MT7628 + MT7612e的板子,厂商就不说了,现在就用这个说说menu的配置吧!

在图形界面里面通过按空格勾选内容,* 号就表示选通过中,按左右键可以在底部命令滑动,按enter键确定底部的命令,按 / 符号可以进行搜索,标题英文说的挺好,看看吧!

设定目标芯片

在make menuconfig后,在第一页设置好前三栏,选择对于的芯片平台。

勾选驱动

在 MTK Properties-> Drivers 里面将 kmod-mt7628 和 kmod-mt76x2e 添加上。

需要注意的是,对后面有箭头的项目还能点进去设置参数,kmod-mt7628进去就是下面内容:

其实这几张图片都是从别人那拿的,有兴趣可以看看这个博客。下面是上面两个栏的配置,可以参考一下,具体内容按自己需要吧!

刷机

在上面配置好menu后使用make V=s生成固件就可以刷机了,固件的位置在下面这个目录

openwrt-sdk\bin\ramips\openwrt-ramips-mt7628-mt7628-squashfs-sysupgrade.bin

可以通过串口或者从网页就可以完成刷机了,应该很简单,不多说了。

安装程序

openwrt也可以像安卓手机一样,通过一个ipk文件安装程序,可以在menu里面把sftp打开:

Network -> SSH -> openssh-sftp-server. OpenSSH SFTP server

编译固件刷上,就能够使用 SecureFX / WinSCP 这样的软件复制东西到板卡里面去,一般复制到 /tmp/ 目录下,使用命令可以进行软件安装:

opkg install xxx.ipkopkg update #更新可以获取的软件包列表
opkg upgrade #对已经安装的软件包升级
opkg list #获取软件列表
opkg install #安装指定的软件包
opkg remove #卸载已经安装的指定的软件包

需要注意的是,放在 /tmp/ 目录下的东西路由器重启后会删除,其他就没什么了。

openwrt 环境搭建(win10子系统)相关推荐

  1. win10 linux开发环境搭建,win10子系统linux.ubuntu开发环境搭建

    UI线程和work线程 UI线程处理消息,比如重绘,响应键盘鼠标等等跟消息有关的处理. 而工作线程一般是你自己写的用来处理数据的,比如操作数据库等等.(work线程) ORACLE 自定义分页存储过程 ...

  2. Lua环境搭建 Win10

    Lua环境搭建 Win10 一.安装Lua 基于Mingw构建,需要安装好Mingw环境. 点此获取Lua Source Code.选择版本为 5.35, 解压缩,CMD/PS输入make mingw ...

  3. 《在(虚拟机)ubuntu16.04上进行openwrt环境搭建及源码下载》

    广西·河池学院 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来之河池学院:OpenWrt无线路由组 写作时间: 2020年7月30日21:00:51 <在(虚拟机)ubun ...

  4. java 环境搭建win10

    java 环境搭建win10 首先下载 地址 1.8 11 版本都有https://www.oracle.com/technetwork/cn/java/javase/downloads/index. ...

  5. GAMES101课程环境搭建(Win10+VSCode)

    GAMES101课程环境搭建(Win10+VSCode) 抄自:知乎 发现很多人遇到Mingw环境的问题,这里共享一个可用的mingw,自行解压,然后把bin目录加入环境变量即可. 链接: https ...

  6. unity vscode没有智能提示_GAMES101课程环境搭建(Win10+VSCode)

    最近B站上看到一个不错的图形学教程,复习下图形学知识挺好的. 教程地址:GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 课程主页:GAMES101: ...

  7. Java开发环境搭建-win10

    1.下载jdk包并安装,jdk版本自己选择,此处以jdk8为例 jdk下载链接 2.双击下载的jdk-8u241-windows-x64.exe安装文件(一路默认即可) ##3.环境变量设置 在这里插 ...

  8. 00 OpenCV环境搭建(Win10+Opencv3.1+VS2015企业版)

    一.准备工作: 1.下载OpenCV3.1安装包: 下载网址:http://opencv.org/ 如果下载速度太慢,用我直接提供的:点我~ 2.安装Visual Studio 2015(企业版) 下 ...

  9. Qt开发环境搭建(win10)

    Qt开发环境 1.介绍 Qt是一个跨平台的C++图形用户界面应用程序框架,提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt可以帮助我们轻松地使用C++开发跨平台地GUI程序. 2.下载 ...

最新文章

  1. 好想学python怎么猜人_学手艺我好想学个手艺哦可是脑子怎么想也想 – 手机爱问...
  2. 定义一个有参宏判断一个字符是否在0~9之间
  3. $‘\r‘: command not found解决方法
  4. php管道邮件,php进程通信-PIPE管道通信
  5. Android Butterknife 8.4.0 使用方法总结
  6. 使用Thrift RPC编写程序
  7. 2018最新Java面试78题:数据结构+网络+NoSQL+分布式架构
  8. Android Handler处理机制 ( 三 ) ——Handler,Message,Looper,MessageQueue
  9. 小程序服务器搭建前后端交互,微信小程序:request前后端交互 路由跳转 存储数据到本地和获取 小程序登入 授权...
  10. 【软件project】之第五、六章总结
  11. keras读取训练好的模型参数并把参数赋值给其它模型
  12. 中input宽度_使用HOG对卫星图像中的船舶进行分类
  13. 360浏览器导出Excel闪退BUG
  14. Windows驱动开发入门
  15. 物理Standby数据库的文件路径转换(1)
  16. 百度Android在线语音识别SDK使用方法
  17. Priest John's Busiest Day (2-sat)
  18. pull request 时遇到 conflicted 的解决方法
  19. 手机APP如何访问局域网服务器
  20. vue中DPlayer视频播放器使用方法

热门文章

  1. 计算机专业学生给家长的一封信,大学致家长的一封信
  2. python写邮箱系统_教大家用Python写一个简单电子邮件发信器
  3. 天池SQL训练营TASK2打卡
  4. 【RFID_paper】Action Sensing
  5. 机械臂操作运动传送带上的物体
  6. [项目管理]管理杂谈—三个火枪手
  7. 运用Java制作一个属于自己的音乐播放软件
  8. 计算机课一学期做了什么总结,计算机课程总结范文精选 .doc
  9. 原生JS仿造华为商城案例-实现了简单页面-两种轮播图思路的实现-动态展示数据
  10. 在SEO中必备的知识应该滚瓜烂熟,其余的就是实战落实