[{"data":1,"prerenderedAt":1128},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei":3,"wiki-doc-items-/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei":1082,"language-switcher-data-/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei":1112,"wiki-i18n-paths-/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei":1127},{"id":4,"title":5,"body":6,"canonicalPath":1063,"chapter":1064,"chapterSort":1065,"date":1066,"description":31,"docI18nKey":1067,"docKey":1068,"docRoot":1069,"docTitle":1070,"extension":1071,"i18nKey":1072,"isBlogPost":1073,"isWikiDoc":407,"isWikiIndex":1073,"layout":1074,"legacyPath":1074,"locale":1075,"localeSlug":1076,"meta":1077,"navigation":407,"path":1063,"seo":1078,"sourcePath":1079,"sourceStem":1072,"stem":1080,"wikiDepth":39,"__hash__":1081},"content/_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/ch1-编译环境准备.md","Preparing the compilation environment",{"type":7,"value":8,"toc":1059},"minimark",[9,14,18,22,25,69,76,107,112,355,360,424,427,432,435,450,455,479,482,487,516,522,535,538,544,547,552,555,558,569,572,589,592,600,603,615,618,626,639,642,653,656,661,664,669,672,677,692,698,726,729,732,749,755,779,782,816,819,831,836,885,889,892,904,909,912,924,929,932,944,965,968,983,988,991,1005,1018,1021,1035,1040,1043,1055],[10,11,13],"h3",{"id":12},"environment-description-this-tutorial-uses-ubuntu-2204-as-the-environment","Environment Description: This tutorial uses Ubuntu 22.04 as the environment.",[15,16,17],"p",{},"Please ensure the compilation process is globally magical.",[10,19,21],{"id":20},"basic-compilation-process","Basic compilation process",[15,23,24],{},"Set environment variables (not sure if useful):",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","注意使用root编译会报错，可以在/etc/profile 最后添加export FORCE_UNSAFE_CONFIGURE=1,然后执行\nexport FORCE_UNSAFE_CONFIGURE=1\n","bash","",[33,34,35,51],"code",{"__ignoreMap":31},[36,37,40,44,48],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sScJk","注意使用root编译会报错，可以在/etc/profile",[36,45,47],{"class":46},"sZZnC"," 最后添加export",[36,49,50],{"class":46}," FORCE_UNSAFE_CONFIGURE=1,然后执行\n",[36,52,54,58,62,65],{"class":38,"line":53},2,[36,55,57],{"class":56},"szBVR","export",[36,59,61],{"class":60},"sVt8B"," FORCE_UNSAFE_CONFIGURE",[36,63,64],{"class":56},"=",[36,66,68],{"class":67},"sj4cs","1\n",[70,71,72],"ol",{},[73,74,75],"li",{},"System software package update",[26,77,79],{"className":28,"code":78,"language":30,"meta":31,"style":31},"sudo apt-get -y update && sudo apt-get -y upgrade\n",[33,80,81],{"__ignoreMap":31},[36,82,83,86,89,92,95,98,100,102,104],{"class":38,"line":39},[36,84,85],{"class":42},"sudo",[36,87,88],{"class":46}," apt-get",[36,90,91],{"class":67}," -y",[36,93,94],{"class":46}," update",[36,96,97],{"class":60}," && ",[36,99,85],{"class":42},[36,101,88],{"class":46},[36,103,91],{"class":67},[36,105,106],{"class":46}," upgrade\n",[70,108,109],{"start":53},[73,110,111],{},"Install dependencies and the compilation toolchain",[26,113,115],{"className":28,"code":114,"language":30,"meta":31,"style":31},"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",[33,116,117,162,202,237,266,310],{"__ignoreMap":31},[36,118,119,121,124,127,129,132,135,138,141,144,147,150,153,156,159],{"class":38,"line":39},[36,120,85],{"class":42},[36,122,123],{"class":46}," apt",[36,125,126],{"class":46}," install",[36,128,91],{"class":67},[36,130,131],{"class":46}," ack",[36,133,134],{"class":46}," antlr3",[36,136,137],{"class":46}," aria2",[36,139,140],{"class":46}," asciidoc",[36,142,143],{"class":46}," autoconf",[36,145,146],{"class":46}," automake",[36,148,149],{"class":46}," autopoint",[36,151,152],{"class":46}," binutils",[36,154,155],{"class":46}," bison",[36,157,158],{"class":46}," build-essential",[36,160,161],{"class":67}," \\\n",[36,163,164,167,170,173,176,179,182,185,188,191,194,197,200],{"class":38,"line":53},[36,165,166],{"class":60},"bzip2 ",[36,168,169],{"class":46},"ccache",[36,171,172],{"class":46}," cmake",[36,174,175],{"class":46}," cpio",[36,177,178],{"class":46}," curl",[36,180,181],{"class":46}," device-tree-compiler",[36,183,184],{"class":46}," fastjar",[36,186,187],{"class":46}," flex",[36,189,190],{"class":46}," gawk",[36,192,193],{"class":46}," gettext",[36,195,196],{"class":46}," gcc-multilib",[36,198,199],{"class":46}," g++-multilib",[36,201,161],{"class":67},[36,203,205,208,211,214,217,220,223,226,229,232,235],{"class":38,"line":204},3,[36,206,207],{"class":60},"git ",[36,209,210],{"class":46},"gperf",[36,212,213],{"class":46}," haveged",[36,215,216],{"class":46}," help2man",[36,218,219],{"class":46}," intltool",[36,221,222],{"class":46}," libc6-dev-i386",[36,224,225],{"class":46}," libelf-dev",[36,227,228],{"class":46}," libglib2.0-dev",[36,230,231],{"class":46}," libgmp3-dev",[36,233,234],{"class":46}," libltdl-dev",[36,236,161],{"class":67},[36,238,240,243,246,249,252,255,258,261,264],{"class":38,"line":239},4,[36,241,242],{"class":60},"libmpc-dev ",[36,244,245],{"class":46},"libmpfr-dev",[36,247,248],{"class":46}," libncurses5-dev",[36,250,251],{"class":46}," libncursesw5-dev",[36,253,254],{"class":46}," libreadline-dev",[36,256,257],{"class":46}," libssl-dev",[36,259,260],{"class":46}," libtool",[36,262,263],{"class":46}," lrzsz",[36,265,161],{"class":67},[36,267,269,272,275,278,281,284,287,290,293,296,299,302,305,308],{"class":38,"line":268},5,[36,270,271],{"class":60},"mkisofs ",[36,273,274],{"class":46},"msmtp",[36,276,277],{"class":46}," nano",[36,279,280],{"class":46}," ninja-build",[36,282,283],{"class":46}," p7zip",[36,285,286],{"class":46}," p7zip-full",[36,288,289],{"class":46}," patch",[36,291,292],{"class":46}," pkgconf",[36,294,295],{"class":46}," python2.7",[36,297,298],{"class":46}," python3",[36,300,301],{"class":46}," python3-pip",[36,303,304],{"class":46}," libpython3-dev",[36,306,307],{"class":46}," qemu-utils",[36,309,161],{"class":67},[36,311,313,316,319,322,325,328,331,334,337,340,343,346,349,352],{"class":38,"line":312},6,[36,314,315],{"class":60},"rsync ",[36,317,318],{"class":46},"scons",[36,320,321],{"class":46}," squashfs-tools",[36,323,324],{"class":46}," subversion",[36,326,327],{"class":46}," swig",[36,329,330],{"class":46}," texinfo",[36,332,333],{"class":46}," uglifyjs",[36,335,336],{"class":46}," upx-ucl",[36,338,339],{"class":46}," unzip",[36,341,342],{"class":46}," vim",[36,344,345],{"class":46}," wget",[36,347,348],{"class":46}," xmlto",[36,350,351],{"class":46}," xxd",[36,353,354],{"class":46}," zlib1g-dev\n",[70,356,357],{"start":204},[73,358,359],{},"Download OpenWrt source code",[26,361,363],{"className":28,"code":362,"language":30,"meta":31,"style":31},"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",[33,364,365,387,403,409,415],{"__ignoreMap":31},[36,366,367,370,373,376,378,381,384],{"class":38,"line":39},[36,368,369],{"class":42},"git",[36,371,372],{"class":46}," clone",[36,374,375],{"class":46}," https://github.com/openwrt/openwrt.git",[36,377,97],{"class":60},[36,379,380],{"class":67},"cd",[36,382,383],{"class":46}," openwrt",[36,385,386],{"class":60}," \n",[36,388,389,391,393,396,398,400],{"class":38,"line":53},[36,390,369],{"class":42},[36,392,372],{"class":46},[36,394,395],{"class":46}," https://github.com/coolsnowwolf/lede",[36,397,97],{"class":60},[36,399,380],{"class":67},[36,401,402],{"class":46}," lede\n",[36,404,405],{"class":38,"line":204},[36,406,408],{"emptyLinePlaceholder":407},true,"\n",[36,410,411],{"class":38,"line":239},[36,412,414],{"class":413},"sJ8bj","# 还有个\n",[36,416,417,419,421],{"class":38,"line":268},[36,418,369],{"class":42},[36,420,372],{"class":46},[36,422,423],{"class":46}," https://github.com/istoreos/istoreos\n",[15,425,426],{},"(There are many source codes available; this tutorial uses the official source code and LEDE as examples.)",[70,428,429],{"start":239},[73,430,431],{},"Switch to the appropriate branch.",[15,433,434],{},"openwrt-22.03 has removed iptables. To avoid compatibility issues, temporarily switch to the openwrt-21.02 branch:",[26,436,438],{"className":28,"code":437,"language":30,"meta":31,"style":31},"git checkout openwrt-21.02\n",[33,439,440],{"__ignoreMap":31},[36,441,442,444,447],{"class":38,"line":39},[36,443,369],{"class":42},[36,445,446],{"class":46}," checkout",[36,448,449],{"class":46}," openwrt-21.02\n",[70,451,452],{"start":268},[73,453,454],{},"Update and install feed software sources.",[26,456,458],{"className":28,"code":457,"language":30,"meta":31,"style":31},"./scripts/feeds update -a && ./scripts/feeds install -a\n",[33,459,460],{"__ignoreMap":31},[36,461,462,465,467,470,472,474,476],{"class":38,"line":39},[36,463,464],{"class":42},"./scripts/feeds",[36,466,94],{"class":46},[36,468,469],{"class":67}," -a",[36,471,97],{"class":60},[36,473,464],{"class":42},[36,475,126],{"class":46},[36,477,478],{"class":67}," -a\n",[15,480,481],{},"(The following is for campus network anti-detection deployment)",[70,483,484],{"start":312},[73,485,486],{},"Join module",[26,488,490],{"className":28,"code":489,"language":30,"meta":31,"style":31},"git clone https://github.com/Zxilly/UA2F.git package/UA2F\ngit clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid \n",[33,491,492,504],{"__ignoreMap":31},[36,493,494,496,498,501],{"class":38,"line":39},[36,495,369],{"class":42},[36,497,372],{"class":46},[36,499,500],{"class":46}," https://github.com/Zxilly/UA2F.git",[36,502,503],{"class":46}," package/UA2F\n",[36,505,506,508,510,513],{"class":38,"line":53},[36,507,369],{"class":42},[36,509,372],{"class":46},[36,511,512],{"class":46}," https://github.com/CHN-beta/rkp-ipid.git",[36,514,515],{"class":46}," package/rkp-ipid\n",[70,517,519],{"start":518},7,[73,520,521],{},"Configuration Editing",[26,523,525],{"className":28,"code":524,"language":30,"meta":31,"style":31},"make menuconfig\n",[33,526,527],{"__ignoreMap":31},[36,528,529,532],{"class":38,"line":39},[36,530,531],{"class":42},"make",[36,533,534],{"class":46}," menuconfig\n",[15,536,537],{},"Configure and compile rdp-ipid:",[539,540,541],"ul",{},[73,542,543],{},"Kernel modules → Other modules → kmod-rkp-ipid",[15,545,546],{},"Configure and compile ua2f:",[539,548,549],{},[73,550,551],{},"Network → Routing and Redirection → UA2F",[15,553,554],{},"Configure and compile the iptables module (in Firewall)",[15,556,557],{},"Selected:",[539,559,560,563,566],{},[73,561,562],{},"iptables-mod-filter",[73,564,565],{},"iptables-mod-ipopt",[73,567,568],{},"iptables-mod-u32",[15,570,571],{},"Basic Interface Configuration:",[539,573,574,577,580,583,586],{},[73,575,576],{},"LuCI → Collections → luci (selected by default in LEDE)",[73,578,579],{},"LuCI → Modules → Translations → Chinese Simplified (zh_Hans) (already selected by default in LEDE)",[73,581,582],{},"LuCI → Modules → luci-compat",[73,584,585],{},"LuCI → Applications → luci-app-ttyd (web terminal)",[73,587,588],{},"LuCI → Themes → xxxxx (choose the admin interface theme as needed; if the router's storage is too small, it's recommended to keep the default).",[15,590,591],{},"Other configurations:",[539,593,594,597],{},[73,595,596],{},"Add EXT4 hard disk format support: Kernel modules > Filesystem > kmod-fs-ext4",[73,598,599],{},"Add USB support (if not added, the keyboard may not respond): Kernel modules > USB Support",[15,601,602],{},"Network card driver configuration:",[539,604,605,608],{},[73,606,607],{},"After checking, the network card uses the Intel I211-AT, which runs on the PCIe bus. The e1000e driver should be selected here.",[73,609,610,611,614],{},"Kernel modules > Network Devices",[612,613],"br",{},"\nSelect the kmod-e1000e and kmod-igb drivers.",[15,616,617],{},"Wireless network card driver:",[539,619,620,623],{},[73,621,622],{},"Find the RTL8821AE driver in the wireless drivers within the kernel.",[73,624,625],{},"Kernel modules > Wireless Drivers",[627,628,629],"blockquote",{},[15,630,631,632,638],{},"Author: KANSUNG\nLink: ",[633,634,635],"a",{"href":635,"rel":636},"https://www.jianshu.com/p/5190ab903820",[637],"nofollow","\nSource: Jianshu",[15,640,641],{},"Add other tools (optional):",[539,643,644,647,650],{},[73,645,646],{},"LuCI > Applications -> luci-app-openclash",[73,648,649],{},"LuCI > Applications -> luci-app-adblock",[73,651,652],{},"LuCI > Applications -> luci-app-ddns-go",[15,654,655],{},"Add necessary components:",[539,657,658],{},[73,659,660],{},"Kernel modules -> Network Support -> kmod-tun (required for OpenClash TUN mode)",[15,662,663],{},"Exclude conflicting components:",[539,665,666],{},[73,667,668],{},"Base system -> dnsmasq (uncheck, because dnsmasq-full is installed by default, and dnsmasq must be excluded to avoid conflict errors)",[15,670,671],{},"Edit the configuration file:",[539,673,674],{},[73,675,676],{},"Using vim .config, add a line at the beginning (required by the UA2F plugin):",[26,678,680],{"className":28,"code":679,"language":30,"meta":31,"style":31},"CONFIG_NETFILTER_NETLINK_GLUE_CT=y\n",[33,681,682],{"__ignoreMap":31},[36,683,684,687,689],{"class":38,"line":39},[36,685,686],{"class":60},"CONFIG_NETFILTER_NETLINK_GLUE_CT",[36,688,64],{"class":56},[36,690,691],{"class":46},"y\n",[70,693,695],{"start":694},8,[73,696,697],{},"Compile and configure the kernel",[26,699,701],{"className":28,"code":700,"language":30,"meta":31,"style":31},"make kernel_menuconfig\nmake -j1 V=sc kernel_menuconfig  # 日志更详细\n",[33,702,703,710],{"__ignoreMap":31},[36,704,705,707],{"class":38,"line":39},[36,706,531],{"class":42},[36,708,709],{"class":46}," kernel_menuconfig\n",[36,711,712,714,717,720,723],{"class":38,"line":53},[36,713,531],{"class":42},[36,715,716],{"class":67}," -j1",[36,718,719],{"class":46}," V=sc",[36,721,722],{"class":46}," kernel_menuconfig",[36,724,725],{"class":413},"  # 日志更详细\n",[15,727,728],{},"Configuration path:\nNetworking support →\nNetworking options →\nNetwork packet filtering framework (Netfilter) (select it first before entering)\nCore Netfilter Configuration →",[15,730,731],{},"Select the following options:",[539,733,734,737,740,743,746],{},[73,735,736],{},"Netfilter NFNETLINK interface",[73,738,739],{},"Netfilter LOG over NFNETLINK interface",[73,741,742],{},"Netfilter connection tracking support",[73,744,745],{},"Connection tracking netlink interface",[73,747,748],{},"NFQUEUE and NFLOG integration with Connection Tracking",[70,750,752],{"start":751},9,[73,753,754],{},"Compile\nDownload the compilation tools:",[26,756,758],{"className":28,"code":757,"language":30,"meta":31,"style":31},"make download -j$(nproc) V=s\n",[33,759,760],{"__ignoreMap":31},[36,761,762,764,767,770,773,776],{"class":38,"line":39},[36,763,531],{"class":42},[36,765,766],{"class":46}," download",[36,768,769],{"class":67}," -j$(",[36,771,772],{"class":42},"nproc",[36,774,775],{"class":67},")",[36,777,778],{"class":46}," V=s\n",[15,780,781],{},"Start compiling:",[26,783,785],{"className":28,"code":784,"language":30,"meta":31,"style":31},"make -j$(nproc) V=s\nmake -j1 V=sc 2> build.log  # 错误输出到日志\n",[33,786,787,799],{"__ignoreMap":31},[36,788,789,791,793,795,797],{"class":38,"line":39},[36,790,531],{"class":42},[36,792,769],{"class":67},[36,794,772],{"class":42},[36,796,775],{"class":67},[36,798,778],{"class":46},[36,800,801,803,805,807,810,813],{"class":38,"line":53},[36,802,531],{"class":42},[36,804,716],{"class":67},[36,806,719],{"class":46},[36,808,809],{"class":56}," 2>",[36,811,812],{"class":46}," build.log",[36,814,815],{"class":413},"  # 错误输出到日志\n",[15,817,818],{},"For a second compilation, you need to update the source code:",[26,820,822],{"className":28,"code":821,"language":30,"meta":31,"style":31},"git pull\n",[33,823,824],{"__ignoreMap":31},[36,825,826,828],{"class":38,"line":39},[36,827,369],{"class":42},[36,829,830],{"class":46}," pull\n",[832,833,835],"h4",{"id":834},"reconfigure-if-you-need-to-reconfigure","Reconfigure If you need to reconfigure:",[26,837,839],{"className":28,"code":838,"language":30,"meta":31,"style":31},"rm -rf ./tmp && rm -rf .config\nmake menuconfig\nmake -j$(($(nproc) + 1)) V=s   # 多线程编译失败后自动进入单线程编译，失败则输出详细日志\n",[33,840,841,861,867],{"__ignoreMap":31},[36,842,843,846,849,852,854,856,858],{"class":38,"line":39},[36,844,845],{"class":42},"rm",[36,847,848],{"class":67}," -rf",[36,850,851],{"class":46}," ./tmp",[36,853,97],{"class":60},[36,855,845],{"class":42},[36,857,848],{"class":67},[36,859,860],{"class":46}," .config\n",[36,862,863,865],{"class":38,"line":53},[36,864,531],{"class":42},[36,866,534],{"class":46},[36,868,869,871,874,876,879,882],{"class":38,"line":204},[36,870,531],{"class":42},[36,872,873],{"class":67}," -j$(($(",[36,875,772],{"class":42},[36,877,878],{"class":67},") + 1))",[36,880,881],{"class":46}," V=s",[36,883,884],{"class":413},"   # 多线程编译失败后自动进入单线程编译，失败则输出详细日志\n",[832,886,888],{"id":887},"compile-and-replace-the-firmware-for-a-different-cpu-architecture-recommended-action","Compile and replace the firmware for a different CPU architecture (recommended action)",[15,890,891],{},"Clear old build artifacts:",[26,893,895],{"className":28,"code":894,"language":30,"meta":31,"style":31},"make clean\n",[33,896,897],{"__ignoreMap":31},[36,898,899,901],{"class":38,"line":39},[36,900,531],{"class":42},[36,902,903],{"class":46}," clean\n",[627,905,906],{},[15,907,908],{},"Execute after large-scale source code updates or kernel updates to ensure compilation quality. This operation will delete files in the /bin and /build_dir directories.",[15,910,911],{},"Clean up old build artifacts, cross-compilation tools, toolchain directories, and similar items.",[26,913,915],{"className":28,"code":914,"language":30,"meta":31,"style":31},"make dirclean\n",[33,916,917],{"__ignoreMap":31},[36,918,919,921],{"class":38,"line":39},[36,920,531],{"class":42},[36,922,923],{"class":46}," dirclean\n",[627,925,926],{},[15,927,928],{},"Must be executed before switching architectures for compilation. This operation deletes files in the /bin and /build_dir directories (make clean), as well as files in /staging_dir, /toolchain, /tmp, and /logs.",[15,930,931],{},"Clear files outside the OpenWrt source code (optional):",[26,933,935],{"className":28,"code":934,"language":30,"meta":31,"style":31},"make distclean\n",[33,936,937],{"__ignoreMap":31},[36,938,939,941],{"class":38,"line":39},[36,940,531],{"class":42},[36,942,943],{"class":46}," distclean\n",[627,945,946],{},[15,947,948,949,952,953,956,957,960,961,964],{},"Unless you are doing development and plan to push to a remote repository like GitHub, this is almost never needed. This operation is equivalent to ",[33,950,951],{},"make dirclean"," plus deleting the ",[33,954,955],{},"/dl",", ",[33,958,959],{},"/feeds"," directories and the ",[33,962,963],{},".config"," file.",[15,966,967],{},"Restore OpenWrt source code to its original state (optional):",[26,969,971],{"className":28,"code":970,"language":30,"meta":31,"style":31},"git clean -xdf\n",[33,972,973],{"__ignoreMap":31},[36,974,975,977,980],{"class":38,"line":39},[36,976,369],{"class":42},[36,978,979],{"class":46}," clean",[36,981,982],{"class":67}," -xdf\n",[627,984,985],{},[15,986,987],{},"If you have broken the source code or haven't compiled it in a long time.",[15,989,990],{},"Clear temporary files:",[26,992,994],{"className":28,"code":993,"language":30,"meta":31,"style":31},"rm -rf tmp\n",[33,995,996],{"__ignoreMap":31},[36,997,998,1000,1002],{"class":38,"line":39},[36,999,845],{"class":42},[36,1001,848],{"class":67},[36,1003,1004],{"class":46}," tmp\n",[627,1006,1007],{},[15,1008,1009,1010,1013,1014,1017],{},"Delete temporary files generated after running ",[33,1011,1012],{},"make menuconfig",", including some package search information. After deletion, the packages in the ",[33,1015,1016],{},"package"," directory will be reloaded. If not deleted, some newly added packages may not appear.",[15,1019,1020],{},"Delete the build configuration file.",[26,1022,1024],{"className":28,"code":1023,"language":30,"meta":31,"style":31},"rm -f .config\n",[33,1025,1026],{"__ignoreMap":31},[36,1027,1028,1030,1033],{"class":38,"line":39},[36,1029,845],{"class":42},[36,1031,1032],{"class":67}," -f",[36,1034,860],{"class":46},[627,1036,1037],{},[15,1038,1039],{},"If you deselect certain components without removing them, their dependent components will not be automatically deselected. Therefore, it is recommended to delete the components when adjustments are needed.",[15,1041,1042],{},"Note: Do not use the root user for any operations.",[627,1044,1045,1048],{},[15,1046,1047],{},"Copyright notice: This post is original content by the blogger, licensed under the CC 4.0 BY-SA copyright agreement. Please include the original source link and this notice when reposting.",[15,1049,1050,1051],{},"Original link: ",[633,1052,1053],{"href":1053,"rel":1054},"https://blog.csdn.net/u010674953/article/details/129280724",[637],[1056,1057,1058],"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":31,"searchDepth":53,"depth":53,"links":1060},[1061,1062],{"id":12,"depth":204,"text":13},{"id":20,"depth":204,"text":21},"/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei","1",1000000,"2021-09-16","wiki/2021-09-16-openwrt-bian-yi-jiao-xue","en-us:2021-09-16-openwrt-bian-yi-jiao-xue","/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue","OpenWrt编译教学","md","wiki/2021-09-16-OpenWrt编译教学/ch1-编译环境准备",false,null,"en-US","en-us",{},{"title":5,"description":31},"/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei","_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/ch1-编译环境准备","ZdyoFfQPFEJw3z5kh6ypZbX3HwCEAiho1mJiC4whWMQ",[1083,1084,1090,1096,1102,1108],{"path":1063,"stem":1080,"title":5,"date":1066,"chapter":1064,"chapterSort":1065,"docKey":1068,"docRoot":1069,"docTitle":1070,"isWikiDoc":407,"isWikiIndex":1073},{"path":1085,"stem":1086,"title":1087,"date":1066,"chapter":1088,"chapterSort":1089,"docKey":1068,"docRoot":1069,"docTitle":1070,"isWikiDoc":407,"isWikiIndex":1073},"/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch2-ge-xing-hua-pei-zhi","_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/ch2-个性化配置","Personalized Configuration","2",2000000,{"path":1091,"stem":1092,"title":1093,"date":1066,"chapter":1094,"chapterSort":1095,"docKey":1068,"docRoot":1069,"docTitle":1070,"isWikiDoc":407,"isWikiIndex":1073},"/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch3-cha-jian-kai-fa","_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/ch3-插件开发","Plugin development","3",3000000,{"path":1097,"stem":1098,"title":1099,"date":1066,"chapter":1100,"chapterSort":1101,"docKey":1068,"docRoot":1069,"docTitle":1070,"isWikiDoc":407,"isWikiIndex":1073},"/en-us/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch4-bu-chong-gong-ju","_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/ch4-补充工具","Supplementary Tools","4",4000000,{"path":1103,"stem":1104,"title":1105,"date":1066,"chapter":1106,"chapterSort":1107,"docKey":1068,"docRoot":1069,"docTitle":1070,"isWikiDoc":407,"isWikiIndex":1073},"/en-us/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","_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/ch5-其他参考资料添加USB和硬盘格式还有网卡教程：","Other references added: USB and hard drive formatting, plus network card tutorial:","5",5000000,{"path":1069,"stem":1109,"title":1110,"date":1066,"chapter":1074,"chapterSort":1111,"docKey":1068,"docRoot":1069,"docTitle":1070,"isWikiDoc":407,"isWikiIndex":407},"_i18n/en-us/wiki/2021-09-16-OpenWrt编译教学/index","OpenWrt Compilation Tutorial",0,{"variants":1113},[1114,1115,1118,1121,1124],{"path":1063,"localeSlug":1076,"i18nKey":1072},{"path":1116,"localeSlug":1117,"i18nKey":1072},"/zh-hant/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei","zh-hant",{"path":1119,"localeSlug":1120,"i18nKey":1072},"/zh-hk/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei","zh-hk",{"path":1122,"localeSlug":1123,"i18nKey":1072},"/zh-tw/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei","zh-tw",{"path":1125,"localeSlug":1126,"i18nKey":1072},"/zh-cn/wiki/2021-09-16-openwrt-bian-yi-jiao-xue/ch1-bian-yi-huan-jing-zhun-bei","zh-cn",[1063,1079,1116,1079,1119,1079,1122,1079,1125,1079],1780674001948]