|
本帖最后由 hackpascal 于 2016-11-29 00:33 编辑
成功使用 Windows 10 自带的 Linux 子系统 (WSL) 编译 OpenWrt
如图:
在 WSL 里面编译 OpenWrt 跟在普通 Linux 环境下编译没有任何区别
但是要注意的是:
- Windows 10 系统版本要求是 Windows 10 周年更新 1607 (build 14393) 或者之上的 Insider Preview,必须是 64 位版
- WSL 不能修改根目录位置,因此只能在系统盘里使用,编译前请保证系统盘有足够的空间
- 使用最新官方 LEDE 代码执行一次只带 LuCI 的编译,需要 10GiB 左右的空间
- 因为 Windows 系统磁盘 I/O 效率问题,在 WSL 的编译效率只有在原生 Linux 系统里的 40%~70% 左右
- 不建议在 SSD 里面编译,不解释。可以参考补充2的教程将 Bash 目录移动到 VHD 中,将 VHD 储存在其它分区
- 不要使用 Windows 下的文本编辑器一类的工具来修改 lxss 目录里的文件,这些工具会使 Linux 文件系统关键属性丢失,导致出现在 WSL 里找不到修改后的文件的情况 (可以使用补充1里的工具)
- 可以在 WSL 里安装 gedit,配合 Windows 里面安装 Xming 一类的 X Window 服务器来实现启动图形界面程序
使用 WSL 编译 OpenWrt 前,记得先执行 sudo apt-get install unzip,WSL 默认不带 unzip,但这是编译 OpenWrt 必需的
没有教程,因为跟 “Ubuntu 编译 OpenWrt” 之类的教程的操作方法没有任何区别
补充1:
修改过的 Notepad++ 7.2.1 x86,支持保留现有 WSL 文件 Linux 文件系统关键属性
使用此工具可以安全修改 lxss 目录下的文件,修改后的文件会保留原始文件的 Linux 文件权限信息 (会同步修改文件时间)
新建的文件不会包含 Linux 文件权限信息,因此请在 Bash 里创建文件,再用此工具进行修改
须先安装 notepad++ 7.2.1 32位版 (https://notepad-plus-plus.org/download/v7.2.1.html)
然后将压缩包中的 notepad++.exe 替换掉 notepad++ 安装目录中的同名文件
压缩包中包含改动的 patch 文件,有兴趣者可以自行编译 (patch 只修改了 VS2015 工程文件,VS2013 的没修改。因此如果要使用 VS2013 进行编译,请手动在工程里添加 lxss.cpp 文件)
度盘:
http://pan.baidu.com/s/1qXX9C0O
补充2:
将 lxss 目录移动到其它分区
如果要这么做,请确保开启了 WSL 支持,但是没有安装 Bash。如果已经安装,请备份数据后执行 lxrun.exe /uninstall 来卸载。
卸载后,请确保 C:\Users\<你的用户名>\AppData\Local\lxss 目录是空的(注意此目录是隐藏的),如果不是空的,则需要删除里面的所有内容 (注意备份数据)
如果 C:\Users\<你的用户名>\AppData\Local\lxss 目录不存在,就创建 lxss 空文件夹。
请将 C: 替换为系统所在的盘符
需要准备的工具:
Process Monitor (https://download.sysinternals.com/files/ProcessMonitor.zip)
首先打开 Windows 系统的磁盘管理,Win+R -> diskmgmt.msc
然后点击菜单 [操作] -> [创建 VHD]
然后根据自己的需求选定文件存放的位置、VHD 文件类型和大小等
然后等待 VHD 创建完毕
创建好后的状态:
然后右键单击新创建的 VHD 虚拟磁盘
出现对话框,使用默认设置即可
初始化完毕后,即可创建分区了
WSL 需要 NTFS 文件系统,因此将整个 VHD 创建为一个 NTFS 盘即可,其它设置默认即可
这一步需要注意,不要选择 "分配以下驱动器号",要选择 "装入以下空白 NTFS 文件夹中"
然后将路径填为 C:\Users\<你的用户名>\AppData\Local\lxss
这也是为什么一开始要求删除已安装的 Bash,以及清空 lxss 目录内容的原因
然后等待分区创建完成。
分区创建完成后,在 CMD 中运行 lxrun.exe /install 以正常方式安装 Bash
此时会提示创建 UNIX 用户失败,但是不用关心
然后是重点步骤:
打开 Process Monitor。程序会记录大量的操作记录,可能会卡死
因此建议在打开 Process Monitor 之前,关闭其他可能的程序,以减少进程操作频率
打开 Process Monitor,如果出现如下的界面
那么进行如下设置,否则请直接跳到下一步。如果不想设置,也可以直接关闭设置窗口,直接进入下一步。
将第一个下拉菜单设置为 Process Name,将第二个下拉菜单设置为 is not,然后文本框中输入 svchost.exe,第三个下拉菜单设置为 Exclude,然后点击 [Add] 按钮。
然后点击 [OK] 按钮。
此处是设置了过滤器,可以减少记录的进程操作数量
此时 Process Monitor 就会开始记录大量的进程操作
然后在 CMD 里执行 lxrun.exe /setdefaultuser
会出现要求输入新 UNIX 用户名的提示,输入自己需要的用户名,然后回车
会提示出错,不用管
然后打开 Process Monitor 窗口,按 Ctrl + E 快捷键停止捕捉进程操作
然后按 Ctrl + F 快捷键打开查找窗口,输入 rootfs,然后开始一个个查找
然后会出现一条记录,其中的文件路径会有一个奇怪的字符出现在 rootfs 前面,这就所需要的数据
双击此条目,打开事件属性窗口
将这个特殊字符复制下来,并妥善保存
这个特殊字符在不同的电脑里都可能不同
它是实现本教程移动 lxss 目录的关键因素
这里,如图得到的特殊字符是一个韩文字符 “잤”
然后关闭 Process Monitor
然后打开 Windows 资源管理器,定位到
C:\Users\<你的用户名>\AppData\Local\lxss
修改 cache data home mnt root rootfs 文件夹的名字,在它们前面加上刚刚获取的特殊字符
然后新建空白文件夹,名字就是上一步里提到的原始文件夹的名字 (cache data home mnt root rootfs 共6个)
如此操作之后,再次在 CMD 中执行 lxrun.exe /setdefaultuser
依然输入之前打算设定的用户名和密码
不出意外的话,应该能顺利进行
此时 Bash 就已经成功安装到 VHD 里面了
可以打开 Bash 并进行测试
可以看到 rootfs 的容量就是 VHD 的容量
然后就可以随意使用了
VHD 在每次开机后都会自动挂载
使用 VHD 的好处就是可以随时备份整个 Bash 环境
当然如果要备份 VHD,记得先在磁盘管理中删除 lxss 挂载点
选择 [删除]
然后分离 VHD
分离后,VHD 文件就可以进行移动、复制等操作了
如果要重新挂载 VHD,则步骤如下
菜单 [操作] -> [附加 VHD]
选择需要挂载的 VHD 文件
附加 VHD 完成后,需要重新将分区挂载到 lxss 目录
选择 "更改驱动器号和路径"
点击 [添加] 按钮
选择 "装入以下空白 NTFS 文件夹中",然后填入路径
C:\Users\<你的用户名>\AppData\Local\lxss
然后确定即可
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|