[{"data":1,"prerenderedAt":1077},["ShallowReactive",2],{"wiki-page-/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei":3,"wiki-doc-items-/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei":1048},{"id":4,"title":5,"body":6,"chapter":1034,"chapterSort":1035,"date":1036,"description":30,"docKey":1037,"docRoot":1038,"docTitle":1039,"extension":1040,"isWikiDoc":406,"isWikiIndex":1041,"layout":1042,"meta":1043,"navigation":406,"path":1044,"seo":1045,"stem":1046,"wikiDepth":38,"__hash__":1047},"content/wiki/2021-09-16-OpenWrt编译教学/ch1-编译环境准备.md","编译环境准备",{"type":7,"value":8,"toc":1030},"minimark",[9,14,18,21,24,68,75,106,111,354,359,423,426,431,434,449,454,478,481,486,515,521,534,537,543,546,551,554,557,568,571,588,591,599,602,610,613,621,634,637,648,651,656,659,664,667,672,687,693,721,724,727,744,750,774,777,811,814,826,831,880,884,887,899,904,907,919,924,927,939,944,947,962,967,970,984,989,992,1006,1011,1014,1026],[10,11,13],"h3",{"id":12},"环境说明本教程以乌班图2204作为环境","环境说明本教程以乌班图22.04作为环境",[15,16,17],"p",{},"请确保编译过程全局魔法",[10,19,20],{"id":20},"基础编译过程",[15,22,23],{},"设置环境变量（不知道有没有用）：",[25,26,31],"pre",{"className":27,"code":28,"language":29,"meta":30,"style":30},"language-bash shiki shiki-themes github-light github-dark","注意使用root编译会报错，可以在/etc/profile 最后添加export FORCE_UNSAFE_CONFIGURE=1,然后执行\nexport FORCE_UNSAFE_CONFIGURE=1\n","bash","",[32,33,34,50],"code",{"__ignoreMap":30},[35,36,39,43,47],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"sScJk","注意使用root编译会报错，可以在/etc/profile",[35,44,46],{"class":45},"sZZnC"," 最后添加export",[35,48,49],{"class":45}," FORCE_UNSAFE_CONFIGURE=1,然后执行\n",[35,51,53,57,61,64],{"class":37,"line":52},2,[35,54,56],{"class":55},"szBVR","export",[35,58,60],{"class":59},"sVt8B"," FORCE_UNSAFE_CONFIGURE",[35,62,63],{"class":55},"=",[35,65,67],{"class":66},"sj4cs","1\n",[69,70,71],"ol",{},[72,73,74],"li",{},"系统软件包更新",[25,76,78],{"className":27,"code":77,"language":29,"meta":30,"style":30},"sudo apt-get -y update && sudo apt-get -y upgrade\n",[32,79,80],{"__ignoreMap":30},[35,81,82,85,88,91,94,97,99,101,103],{"class":37,"line":38},[35,83,84],{"class":41},"sudo",[35,86,87],{"class":45}," apt-get",[35,89,90],{"class":66}," -y",[35,92,93],{"class":45}," update",[35,95,96],{"class":59}," && ",[35,98,84],{"class":41},[35,100,87],{"class":45},[35,102,90],{"class":66},[35,104,105],{"class":45}," upgrade\n",[69,107,108],{"start":52},[72,109,110],{},"安装依赖关系与编译工具链",[25,112,114],{"className":27,"code":113,"language":29,"meta":30,"style":30},"sudo apt install -y ack antlr3 aria2 asciidoc autoconf automake autopoint binutils bison build-essential \\\nbzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \\\ngit gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \\\nlibmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \\\nmkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils \\\nrsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev\n",[32,115,116,161,201,236,265,309],{"__ignoreMap":30},[35,117,118,120,123,126,128,131,134,137,140,143,146,149,152,155,158],{"class":37,"line":38},[35,119,84],{"class":41},[35,121,122],{"class":45}," apt",[35,124,125],{"class":45}," install",[35,127,90],{"class":66},[35,129,130],{"class":45}," ack",[35,132,133],{"class":45}," antlr3",[35,135,136],{"class":45}," aria2",[35,138,139],{"class":45}," asciidoc",[35,141,142],{"class":45}," autoconf",[35,144,145],{"class":45}," automake",[35,147,148],{"class":45}," autopoint",[35,150,151],{"class":45}," binutils",[35,153,154],{"class":45}," bison",[35,156,157],{"class":45}," build-essential",[35,159,160],{"class":66}," \\\n",[35,162,163,166,169,172,175,178,181,184,187,190,193,196,199],{"class":37,"line":52},[35,164,165],{"class":59},"bzip2 ",[35,167,168],{"class":45},"ccache",[35,170,171],{"class":45}," cmake",[35,173,174],{"class":45}," cpio",[35,176,177],{"class":45}," curl",[35,179,180],{"class":45}," device-tree-compiler",[35,182,183],{"class":45}," fastjar",[35,185,186],{"class":45}," flex",[35,188,189],{"class":45}," gawk",[35,191,192],{"class":45}," gettext",[35,194,195],{"class":45}," gcc-multilib",[35,197,198],{"class":45}," g++-multilib",[35,200,160],{"class":66},[35,202,204,207,210,213,216,219,222,225,228,231,234],{"class":37,"line":203},3,[35,205,206],{"class":59},"git ",[35,208,209],{"class":45},"gperf",[35,211,212],{"class":45}," haveged",[35,214,215],{"class":45}," help2man",[35,217,218],{"class":45}," intltool",[35,220,221],{"class":45}," libc6-dev-i386",[35,223,224],{"class":45}," libelf-dev",[35,226,227],{"class":45}," libglib2.0-dev",[35,229,230],{"class":45}," libgmp3-dev",[35,232,233],{"class":45}," libltdl-dev",[35,235,160],{"class":66},[35,237,239,242,245,248,251,254,257,260,263],{"class":37,"line":238},4,[35,240,241],{"class":59},"libmpc-dev ",[35,243,244],{"class":45},"libmpfr-dev",[35,246,247],{"class":45}," libncurses5-dev",[35,249,250],{"class":45}," libncursesw5-dev",[35,252,253],{"class":45}," libreadline-dev",[35,255,256],{"class":45}," libssl-dev",[35,258,259],{"class":45}," libtool",[35,261,262],{"class":45}," lrzsz",[35,264,160],{"class":66},[35,266,268,271,274,277,280,283,286,289,292,295,298,301,304,307],{"class":37,"line":267},5,[35,269,270],{"class":59},"mkisofs ",[35,272,273],{"class":45},"msmtp",[35,275,276],{"class":45}," nano",[35,278,279],{"class":45}," ninja-build",[35,281,282],{"class":45}," p7zip",[35,284,285],{"class":45}," p7zip-full",[35,287,288],{"class":45}," patch",[35,290,291],{"class":45}," pkgconf",[35,293,294],{"class":45}," python2.7",[35,296,297],{"class":45}," python3",[35,299,300],{"class":45}," python3-pip",[35,302,303],{"class":45}," libpython3-dev",[35,305,306],{"class":45}," qemu-utils",[35,308,160],{"class":66},[35,310,312,315,318,321,324,327,330,333,336,339,342,345,348,351],{"class":37,"line":311},6,[35,313,314],{"class":59},"rsync ",[35,316,317],{"class":45},"scons",[35,319,320],{"class":45}," squashfs-tools",[35,322,323],{"class":45}," subversion",[35,325,326],{"class":45}," swig",[35,328,329],{"class":45}," texinfo",[35,331,332],{"class":45}," uglifyjs",[35,334,335],{"class":45}," upx-ucl",[35,337,338],{"class":45}," unzip",[35,340,341],{"class":45}," vim",[35,343,344],{"class":45}," wget",[35,346,347],{"class":45}," xmlto",[35,349,350],{"class":45}," xxd",[35,352,353],{"class":45}," zlib1g-dev\n",[69,355,356],{"start":203},[72,357,358],{},"下载 OpenWrt 源码",[25,360,362],{"className":27,"code":361,"language":29,"meta":30,"style":30},"git clone https://github.com/openwrt/openwrt.git && cd openwrt \ngit clone https://github.com/coolsnowwolf/lede && cd lede\n\n# 还有个\ngit clone https://github.com/istoreos/istoreos\n",[32,363,364,386,402,408,414],{"__ignoreMap":30},[35,365,366,369,372,375,377,380,383],{"class":37,"line":38},[35,367,368],{"class":41},"git",[35,370,371],{"class":45}," clone",[35,373,374],{"class":45}," https://github.com/openwrt/openwrt.git",[35,376,96],{"class":59},[35,378,379],{"class":66},"cd",[35,381,382],{"class":45}," openwrt",[35,384,385],{"class":59}," \n",[35,387,388,390,392,395,397,399],{"class":37,"line":52},[35,389,368],{"class":41},[35,391,371],{"class":45},[35,393,394],{"class":45}," https://github.com/coolsnowwolf/lede",[35,396,96],{"class":59},[35,398,379],{"class":66},[35,400,401],{"class":45}," lede\n",[35,403,404],{"class":37,"line":203},[35,405,407],{"emptyLinePlaceholder":406},true,"\n",[35,409,410],{"class":37,"line":238},[35,411,413],{"class":412},"sJ8bj","# 还有个\n",[35,415,416,418,420],{"class":37,"line":267},[35,417,368],{"class":41},[35,419,371],{"class":45},[35,421,422],{"class":45}," https://github.com/istoreos/istoreos\n",[15,424,425],{},"（源码有很多，本教程以官方源码和LEDE为例）",[69,427,428],{"start":238},[72,429,430],{},"切换适合分支",[15,432,433],{},"openwrt-22.03 已将 iptables 移除，为避免兼容性问题，暂时切换到 openwrt-21.02分支:",[25,435,437],{"className":27,"code":436,"language":29,"meta":30,"style":30},"git checkout openwrt-21.02\n",[32,438,439],{"__ignoreMap":30},[35,440,441,443,446],{"class":37,"line":38},[35,442,368],{"class":41},[35,444,445],{"class":45}," checkout",[35,447,448],{"class":45}," openwrt-21.02\n",[69,450,451],{"start":267},[72,452,453],{},"更新并安装 feeds 软件源",[25,455,457],{"className":27,"code":456,"language":29,"meta":30,"style":30},"./scripts/feeds update -a && ./scripts/feeds install -a\n",[32,458,459],{"__ignoreMap":30},[35,460,461,464,466,469,471,473,475],{"class":37,"line":38},[35,462,463],{"class":41},"./scripts/feeds",[35,465,93],{"class":45},[35,467,468],{"class":66}," -a",[35,470,96],{"class":59},[35,472,463],{"class":41},[35,474,125],{"class":45},[35,476,477],{"class":66}," -a\n",[15,479,480],{},"（以下为校园网防检测部署）",[69,482,483],{"start":311},[72,484,485],{},"加入模块",[25,487,489],{"className":27,"code":488,"language":29,"meta":30,"style":30},"git clone https://github.com/Zxilly/UA2F.git package/UA2F\ngit clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid \n",[32,490,491,503],{"__ignoreMap":30},[35,492,493,495,497,500],{"class":37,"line":38},[35,494,368],{"class":41},[35,496,371],{"class":45},[35,498,499],{"class":45}," https://github.com/Zxilly/UA2F.git",[35,501,502],{"class":45}," package/UA2F\n",[35,504,505,507,509,512],{"class":37,"line":52},[35,506,368],{"class":41},[35,508,371],{"class":45},[35,510,511],{"class":45}," https://github.com/CHN-beta/rkp-ipid.git",[35,513,514],{"class":45}," package/rkp-ipid\n",[69,516,518],{"start":517},7,[72,519,520],{},"配置编辑",[25,522,524],{"className":27,"code":523,"language":29,"meta":30,"style":30},"make menuconfig\n",[32,525,526],{"__ignoreMap":30},[35,527,528,531],{"class":37,"line":38},[35,529,530],{"class":41},"make",[35,532,533],{"class":45}," menuconfig\n",[15,535,536],{},"配置编译 rdp-ipid:",[538,539,540],"ul",{},[72,541,542],{},"Kernel modules → Other modules → kmod-rkp-ipid",[15,544,545],{},"配置编译 ua2f:",[538,547,548],{},[72,549,550],{},"Network → Routing and Redirection → UA2F",[15,552,553],{},"配置编译 iptables 模块（Firewall中）",[15,555,556],{},"选中：",[538,558,559,562,565],{},[72,560,561],{},"iptables-mod-filter",[72,563,564],{},"iptables-mod-ipopt",[72,566,567],{},"iptables-mod-u32",[15,569,570],{},"基本界面配置：",[538,572,573,576,579,582,585],{},[72,574,575],{},"LuCI → Collections → luci （lede 默认已选）",[72,577,578],{},"LuCI → Modules → Translations → Chinese Simplified (zh_Hans) （lede 默认已选）",[72,580,581],{},"LuCI → Modules → luci-compat",[72,583,584],{},"LuCI → Applications → luci-app-ttyd（网页终端）",[72,586,587],{},"LuCI → Themes → xxxxx (根据需要自己选管理界面的主题，如果路由器储存太小，建议就维持默认的)",[15,589,590],{},"其他配置：",[538,592,593,596],{},[72,594,595],{},"添加EXT4硬盘格式支持：Kernel modules > Filesystem > kmod-fs-ext4",[72,597,598],{},"添加USB支持（如不添加可能会不响应键盘）：Kernel modules > USB Support",[15,600,601],{},"网卡驱动配置：",[538,603,604,607],{},[72,605,606],{},"经查找网卡使用的是Intel IG211-AT，走的是PCIE通道，这里要选用e1000e",[72,608,609],{},"Kernel modules > Network Devices将kmod-e1000e，kmod-igb驱动选中",[15,611,612],{},"无线网卡驱动：",[538,614,615,618],{},[72,616,617],{},"内核中的无线驱动找到RTL8821AE的驱动",[72,619,620],{},"Kernel modules > Wireless Drivers",[622,623,624],"blockquote",{},[15,625,626,627,633],{},"作者：KANSUNG\n链接：",[628,629,630],"a",{"href":630,"rel":631},"https://www.jianshu.com/p/5190ab903820",[632],"nofollow","\n来源：简书",[15,635,636],{},"添加其他工具（可选）：",[538,638,639,642,645],{},[72,640,641],{},"LuCI > Applications -> luci-app-openclash",[72,643,644],{},"LuCI > Applications -> luci-app-adblock",[72,646,647],{},"LuCI > Applications -> luci-app-ddns-go",[15,649,650],{},"添加必要组件：",[538,652,653],{},[72,654,655],{},"Kernel modules -> Network Support -> kmod-tun （openclash TUN模式必须）",[15,657,658],{},"排除冲突组件：",[538,660,661],{},[72,662,663],{},"Base system -> dnsmasq (取消勾选，因为默认会安装dnsmasq-full，需要排除dnsmasq避免冲突报错）",[15,665,666],{},"编辑配置文件：",[538,668,669],{},[72,670,671],{},"使用 vim .config，在开头添加一行（UA2F 插件需要）：",[25,673,675],{"className":27,"code":674,"language":29,"meta":30,"style":30},"CONFIG_NETFILTER_NETLINK_GLUE_CT=y\n",[32,676,677],{"__ignoreMap":30},[35,678,679,682,684],{"class":37,"line":38},[35,680,681],{"class":59},"CONFIG_NETFILTER_NETLINK_GLUE_CT",[35,683,63],{"class":55},[35,685,686],{"class":45},"y\n",[69,688,690],{"start":689},8,[72,691,692],{},"编译和配置内核",[25,694,696],{"className":27,"code":695,"language":29,"meta":30,"style":30},"make kernel_menuconfig\nmake -j1 V=sc kernel_menuconfig  # 日志更详细\n",[32,697,698,705],{"__ignoreMap":30},[35,699,700,702],{"class":37,"line":38},[35,701,530],{"class":41},[35,703,704],{"class":45}," kernel_menuconfig\n",[35,706,707,709,712,715,718],{"class":37,"line":52},[35,708,530],{"class":41},[35,710,711],{"class":66}," -j1",[35,713,714],{"class":45}," V=sc",[35,716,717],{"class":45}," kernel_menuconfig",[35,719,720],{"class":412},"  # 日志更详细\n",[15,722,723],{},"配置路径：\nNetworking support →\nNetworking options →\nNetwork packet filtering framework (Netfilter) （要先选中再进去）→\nCore Netfilter Configuration →",[15,725,726],{},"选中以下选项：",[538,728,729,732,735,738,741],{},[72,730,731],{},"Netfilter NFNETLINK interface",[72,733,734],{},"Netfilter LOG over NFNETLINK interface",[72,736,737],{},"Netfilter connection tracking support",[72,739,740],{},"Connection tracking netlink interface",[72,742,743],{},"NFQUEUE and NFLOG integration with Connection Tracking",[69,745,747],{"start":746},9,[72,748,749],{},"编译\n下载编译工具：",[25,751,753],{"className":27,"code":752,"language":29,"meta":30,"style":30},"make download -j$(nproc) V=s\n",[32,754,755],{"__ignoreMap":30},[35,756,757,759,762,765,768,771],{"class":37,"line":38},[35,758,530],{"class":41},[35,760,761],{"class":45}," download",[35,763,764],{"class":66}," -j$(",[35,766,767],{"class":41},"nproc",[35,769,770],{"class":66},")",[35,772,773],{"class":45}," V=s\n",[15,775,776],{},"开始编译：",[25,778,780],{"className":27,"code":779,"language":29,"meta":30,"style":30},"make -j$(nproc) V=s\nmake -j1 V=sc 2> build.log  # 错误输出到日志\n",[32,781,782,794],{"__ignoreMap":30},[35,783,784,786,788,790,792],{"class":37,"line":38},[35,785,530],{"class":41},[35,787,764],{"class":66},[35,789,767],{"class":41},[35,791,770],{"class":66},[35,793,773],{"class":45},[35,795,796,798,800,802,805,808],{"class":37,"line":52},[35,797,530],{"class":41},[35,799,711],{"class":66},[35,801,714],{"class":45},[35,803,804],{"class":55}," 2>",[35,806,807],{"class":45}," build.log",[35,809,810],{"class":412},"  # 错误输出到日志\n",[15,812,813],{},"二次编译需要更新源码：",[25,815,817],{"className":27,"code":816,"language":29,"meta":30,"style":30},"git pull\n",[32,818,819],{"__ignoreMap":30},[35,820,821,823],{"class":37,"line":38},[35,822,368],{"class":41},[35,824,825],{"class":45}," pull\n",[827,828,830],"h4",{"id":829},"重新配置如果需要重新配置","重新配置如果需要重新配置：",[25,832,834],{"className":27,"code":833,"language":29,"meta":30,"style":30},"rm -rf ./tmp && rm -rf .config\nmake menuconfig\nmake -j$(($(nproc) + 1)) V=s   # 多线程编译失败后自动进入单线程编译，失败则输出详细日志\n",[32,835,836,856,862],{"__ignoreMap":30},[35,837,838,841,844,847,849,851,853],{"class":37,"line":38},[35,839,840],{"class":41},"rm",[35,842,843],{"class":66}," -rf",[35,845,846],{"class":45}," ./tmp",[35,848,96],{"class":59},[35,850,840],{"class":41},[35,852,843],{"class":66},[35,854,855],{"class":45}," .config\n",[35,857,858,860],{"class":37,"line":52},[35,859,530],{"class":41},[35,861,533],{"class":45},[35,863,864,866,869,871,874,877],{"class":37,"line":203},[35,865,530],{"class":41},[35,867,868],{"class":66}," -j$(($(",[35,870,767],{"class":41},[35,872,873],{"class":66},") + 1))",[35,875,876],{"class":45}," V=s",[35,878,879],{"class":412},"   # 多线程编译失败后自动进入单线程编译，失败则输出详细日志\n",[827,881,883],{"id":882},"编译更换其它cpu架构的固件建议操作","编译更换其它CPU架构的固件（建议操作）",[15,885,886],{},"清除旧的编译产物：",[25,888,890],{"className":27,"code":889,"language":29,"meta":30,"style":30},"make clean\n",[32,891,892],{"__ignoreMap":30},[35,893,894,896],{"class":37,"line":38},[35,895,530],{"class":41},[35,897,898],{"class":45}," clean\n",[622,900,901],{},[15,902,903],{},"在源码有大规模更新或者内核更新后执行，以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。",[15,905,906],{},"清除旧的编译产物、交叉编译工具及工具链等目录：",[25,908,910],{"className":27,"code":909,"language":29,"meta":30,"style":30},"make dirclean\n",[32,911,912],{"__ignoreMap":30},[35,913,914,916],{"class":37,"line":38},[35,915,530],{"class":41},[35,917,918],{"class":45}," dirclean\n",[622,920,921],{},[15,922,923],{},"更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。",[15,925,926],{},"清除 OpenWrt 源码以外的文件（可选）：",[25,928,930],{"className":27,"code":929,"language":29,"meta":30,"style":30},"make distclean\n",[32,931,932],{"__ignoreMap":30},[35,933,934,936],{"class":37,"line":38},[35,935,530],{"class":41},[35,937,938],{"class":45}," distclean\n",[622,940,941],{},[15,942,943],{},"除非是做开发，并打算 push 到 GitHub 这样的远程仓库，否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。",[15,945,946],{},"还原 OpenWrt 源码到初始状态（可选）：",[25,948,950],{"className":27,"code":949,"language":29,"meta":30,"style":30},"git clean -xdf\n",[32,951,952],{"__ignoreMap":30},[35,953,954,956,959],{"class":37,"line":38},[35,955,368],{"class":41},[35,957,958],{"class":45}," clean",[35,960,961],{"class":66}," -xdf\n",[622,963,964],{},[15,965,966],{},"如果把源码改坏了，或者长时间没有进行编译时使用。",[15,968,969],{},"清除临时文件：",[25,971,973],{"className":27,"code":972,"language":29,"meta":30,"style":30},"rm -rf tmp\n",[32,974,975],{"__ignoreMap":30},[35,976,977,979,981],{"class":37,"line":38},[35,978,840],{"class":41},[35,980,843],{"class":66},[35,982,983],{"class":45}," tmp\n",[622,985,986],{},[15,987,988],{},"删除执行make menuconfig后产生的一些临时文件，包括一些软件包的检索信息，删除后会重新加载package目录下的软件包。若不删除会导致一些新加入的软件包不显示。",[15,990,991],{},"删除编译配置文件：",[25,993,995],{"className":27,"code":994,"language":29,"meta":30,"style":30},"rm -f .config\n",[32,996,997],{"__ignoreMap":30},[35,998,999,1001,1004],{"class":37,"line":38},[35,1000,840],{"class":41},[35,1002,1003],{"class":66}," -f",[35,1005,855],{"class":45},[622,1007,1008],{},[15,1009,1010],{},"在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消，所以对于需要调整组件的情况下建议删除。",[15,1012,1013],{},"注意：所有操作不要使用root用户",[622,1015,1016,1019],{},[15,1017,1018],{},"版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。",[15,1020,1021,1022],{},"原文链接：",[628,1023,1024],{"href":1024,"rel":1025},"https://blog.csdn.net/u010674953/article/details/129280724",[632],[1027,1028,1029],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":30,"searchDepth":52,"depth":52,"links":1031},[1032,1033],{"id":12,"depth":203,"text":13},{"id":20,"depth":203,"text":20},"1",1000000,"2021-09-16","2021-09-16-openwrt-bian-yi-jiao-xue","/wiki/2021-09-16-openwrt-bian-yi-jiao-xue","OpenWrt编译教学","md",false,null,{},"/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei",{"title":5,"description":30},"wiki/2021-09-16-OpenWrt编译教学/ch1-编译环境准备","VqJbF7HqL5LS083p1STWz3SmJzQe8kc8AFonsL8PZR8",[1049,1050,1056,1062,1068,1074],{"path":1044,"stem":1046,"title":5,"date":1036,"chapter":1034,"chapterSort":1035,"docKey":1037,"docRoot":1038,"docTitle":1039,"isWikiDoc":406,"isWikiIndex":1041},{"path":1051,"stem":1052,"title":1053,"date":1036,"chapter":1054,"chapterSort":1055,"docKey":1037,"docRoot":1038,"docTitle":1039,"isWikiDoc":406,"isWikiIndex":1041},"/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch2-ge-xing-hua-pei-zhi","wiki/2021-09-16-OpenWrt编译教学/ch2-个性化配置","个性化配置","2",2000000,{"path":1057,"stem":1058,"title":1059,"date":1036,"chapter":1060,"chapterSort":1061,"docKey":1037,"docRoot":1038,"docTitle":1039,"isWikiDoc":406,"isWikiIndex":1041},"/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch3-cha-jian-kai-fa","wiki/2021-09-16-OpenWrt编译教学/ch3-插件开发","插件开发","3",3000000,{"path":1063,"stem":1064,"title":1065,"date":1036,"chapter":1066,"chapterSort":1067,"docKey":1037,"docRoot":1038,"docTitle":1039,"isWikiDoc":406,"isWikiIndex":1041},"/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch4-bu-chong-gong-ju","wiki/2021-09-16-OpenWrt编译教学/ch4-补充工具","补充工具","4",4000000,{"path":1069,"stem":1070,"title":1071,"date":1036,"chapter":1072,"chapterSort":1073,"docKey":1037,"docRoot":1038,"docTitle":1039,"isWikiDoc":406,"isWikiIndex":1041},"/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch5-qi-ta-can-kao-zi-liao-tian-jia-usb-he-ying-pan-ge-shi-hai-you-wang-ka-jiao-cheng","wiki/2021-09-16-OpenWrt编译教学/ch5-其他参考资料添加USB和硬盘格式还有网卡教程：","其他参考资料添加USB和硬盘格式还有网卡教程：","5",5000000,{"path":1038,"stem":1075,"title":1039,"date":1036,"chapter":1042,"chapterSort":1076,"docKey":1037,"docRoot":1038,"docTitle":1039,"isWikiDoc":406,"isWikiIndex":406},"wiki/2021-09-16-OpenWrt编译教学/index",0,1778560331444]