精华内容
下载资源
问答
  • wndr3800 LEDE 17.0.1 编译优化版dnsmasq

    千次阅读 2017-09-16 07:27:11
    因为dnsmasq所需要的ipset和server列表多了以后,就导致CPU占用率非常高,所以infinet做了一个优化版本的dnsmasq...所以笔者自己搭建编译环境,编译好了可以在wndr3800上运行的LEDE版本dnsmasq。 直接下载好了以后,替

    因为dnsmasq所需要的ipset和server列表多了以后,就导致CPU占用率非常高,所以infinet做了一个优化版本的dnsmasq,把原来的链表查询改为哈希表查询,所以效率高了很多,但是默认只给了openwrt 15.05编译了ipk安装包openwrt 15.05 dnsmasq优化版ipk包下载,但是LEDE 17.01是没有的。

    • 所以笔者自己搭建编译环境,编译好了可以在wndr3800上运行的LEDE版本dnsmasq,下载地址笔者csdn,本来弄成不要分的,结果csdn现在改成最低也要1分。
    • 直接下载好了以后,替换/usr/sbin/dnsmasq就可以了,测试一下是否可以正常运行
    root@LEDE:/etc/init.d# dnsmasq -v
    Dnsmasq version   Copyright (c) 2000-2015 Simon Kelley
    Compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-DNSSEC loop-detect inotify
    
    This software comes with ABSOLUTELY NO WARRANTY.
    Dnsmasq is free software, and you are welcome to redistribute it
    under the terms of the GNU General Public License, version 2 or 3.
    展开全文
  • 如何编译自己需要的 LEDE 固件
  • 一直有个问题,我自己编译的所有的LEDE的固件,在我使用opkg安装完ssr或者kp之后,打开luci界面会出现: attemp to call a nil field net.arptable (a nil value) 诸如这个消息。 当我使用潘多拉的固件或者是...

    一直有个问题,我自己编译的所有的LEDE的固件,在我使用opkg安装完ssr或者kp之后,打开luci界面会出现:

    attemp to call a nil field net.arptable (a nil value)

    诸如这个消息。

    当我使用潘多拉的固件或者是官方的固件的时候,发现是正常的,这个问题就不会出现,这是为啥来?

    原因就在自己编译的LEDE固件的sys.lua文件和官方的这个文件不一样!!!

    把自己的文件改一下:

    -- Copyright 2008 Steven Barth <steven@midlink.org>
    -- Licensed to the public under the Apache License 2.0.
    
    local io     = require "io"
    local os     = require "os"
    local table  = require "table"
    local nixio  = require "nixio"
    local fs     = require "nixio.fs"
    local uci    = require "luci.model.uci"
    
    local luci  = {}
    luci.util   = require "luci.util"
    luci.ip     = require "luci.ip"
    
    local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select =
    	tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select
    
    
    module "luci.sys"
    
    function call(...)
    	return os.execute(...) / 256
    end
    
    exec = luci.util.exec
    
    function mounts()
    	local data = {}
    	local k = {"fs", "blocks", "used", "available", "percent", "mountpoint"}
    	local ps = luci.util.execi("df")
    
    	if not ps then
    		return
    	else
    		ps()
    	end
    
    	for line in ps do
    		local row = {}
    
    		local j = 1
    		for value in line:gmatch("[^%s]+") do
    			row[k[j]] = value
    			j = j + 1
    		end
    
    		if row[k[1]] then
    
    			-- this is a rather ugly workaround to cope with wrapped lines in
    			-- the df output:
    			--
    			--	/dev/scsi/host0/bus0/target0/lun0/part3
    			--                   114382024  93566472  15005244  86% /mnt/usb
    			--
    
    			if not row[k[2]] then
    				j = 2
    				line = ps()
    				for value in line:gmatch("[^%s]+") do
    					row[k[j]] = value
    					j = j + 1
    				end
    			end
    
    			table.insert(data, row)
    		end
    	end
    
    	return data
    end
    
    -- containing the whole environment is returned otherwise this function returns
    -- the corresponding string value for the given name or nil if no such variable
    -- exists.
    getenv = nixio.getenv
    
    function hostname(newname)
    	if type(newname) == "string" and #newname > 0 then
    		fs.writefile( "/proc/sys/kernel/hostname", newname )
    		return newname
    	else
    		return nixio.uname().nodename
    	end
    end
    
    function httpget(url, stream, target)
    	if not target then
    		local source = stream and io.popen or luci.util.exec
    		return source("wget -qO- '"..url:gsub("'", "").."'")
    	else
    		return os.execute("wget -qO '%s' '%s'" %
    			{target:gsub("'", ""), url:gsub("'", "")})
    	end
    end
    
    function reboot()
    	return os.execute("reboot >/dev/null 2>&1")
    end
    
    function syslog()
    	return luci.util.exec("logread")
    end
    
    function dmesg()
    	return luci.util.exec("dmesg")
    end
    
    function uniqueid(bytes)
    	local rand = fs.readfile("/dev/urandom", bytes)
    	return rand and nixio.bin.hexlify(rand)
    end
    
    function uptime()
    	return nixio.sysinfo().uptime
    end
    
    
    net = {}
    
    --			The following fields are defined for arp entry objects:
    --			{ "IP address", "HW address", "HW type", "Flags", "Mask", "Device" }
    function net.arptable(callback)
    	local arp = (not callback) and {} or nil
    	local e, r, v
    	if fs.access("/proc/net/arp") then
    		for e in io.lines("/proc/net/arp") do
    			local r = { }, v
    			for v in e:gmatch("%S+") do
    				r[#r+1] = v
    			end
    
    			if r[1] ~= "IP" then
    				local x = {
    					["IP address"] = r[1],
    					["HW type"]    = r[2],
    					["Flags"]      = r[3],
    					["HW address"] = r[4],
    					["Mask"]       = r[5],
    					["Device"]     = r[6]
    				}
    
    				if callback then
    					callback(x)
    				else
    					arp = arp or { }
    					arp[#arp+1] = x
    				end
    			end
    		end
    	end
    	return arp
    end
    
    local function _nethints(what, callback)
    	local _, k, e, mac, ip, name
    	local cur = uci.cursor()
    	local ifn = { }
    	local hosts = { }
    
    	local function _add(i, ...)
    		local k = select(i, ...)
    		if k then
    			if not hosts[k] then hosts[k] = { } end
    			hosts[k][1] = select(1, ...) or hosts[k][1]
    			hosts[k][2] = select(2, ...) or hosts[k][2]
    			hosts[k][3] = select(3, ...) or hosts[k][3]
    			hosts[k][4] = select(4, ...) or hosts[k][4]
    		end
    	end
    
    	luci.ip.neighbors(nil, function(neigh)
    		if neigh.mac and neigh.family == 4 then
    			_add(what, neigh.mac:upper(), neigh.dest:string(), nil, nil)
    		elseif neigh.mac and neigh.family == 6 then
    			_add(what, neigh.mac:upper(), nil, neigh.dest:string(), nil)
    		end
    	end)
    
    	if fs.access("/etc/ethers") then
    		for e in io.lines("/etc/ethers") do
    			mac, ip = e:match("^([a-f0-9]%S+) (%S+)")
    			if mac and ip then
    				_add(what, mac:upper(), ip, nil, nil)
    			end
    		end
    	end
    
    	cur:foreach("dhcp", "dnsmasq",
    		function(s)
    			if s.leasefile and fs.access(s.leasefile) then
    				for e in io.lines(s.leasefile) do
    					mac, ip, name = e:match("^%d+ (%S+) (%S+) (%S+)")
    					if mac and ip then
    						_add(what, mac:upper(), ip, nil, name ~= "*" and name)
    					end
    				end
    			end
    		end
    	)
    
    	cur:foreach("dhcp", "host",
    		function(s)
    			for mac in luci.util.imatch(s.mac) do
    				_add(what, mac:upper(), s.ip, nil, s.name)
    			end
    		end)
    
    	for _, e in ipairs(nixio.getifaddrs()) do
    		if e.name ~= "lo" then
    			ifn[e.name] = ifn[e.name] or { }
    			if e.family == "packet" and e.addr and #e.addr == 17 then
    				ifn[e.name][1] = e.addr:upper()
    			elseif e.family == "inet" then
    				ifn[e.name][2] = e.addr
    			elseif e.family == "inet6" then
    				ifn[e.name][3] = e.addr
    			end
    		end
    	end
    
    	for _, e in pairs(ifn) do
    		if e[what] and (e[2] or e[3]) then
    			_add(what, e[1], e[2], e[3], e[4])
    		end
    	end
    
    	for _, e in luci.util.kspairs(hosts) do
    		callback(e[1], e[2], e[3], e[4])
    	end
    end
    
    --          Each entry contains the values in the following order:
    --          [ "mac", "name" ]
    function net.mac_hints(callback)
    	if callback then
    		_nethints(1, function(mac, v4, v6, name)
    			name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4
    			if name and name ~= mac then
    				callback(mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4)
    			end
    		end)
    	else
    		local rv = { }
    		_nethints(1, function(mac, v4, v6, name)
    			name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4
    			if name and name ~= mac then
    				rv[#rv+1] = { mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4 }
    			end
    		end)
    		return rv
    	end
    end
    
    --          Each entry contains the values in the following order:
    --          [ "ip", "name" ]
    function net.ipv4_hints(callback)
    	if callback then
    		_nethints(2, function(mac, v4, v6, name)
    			name = name or nixio.getnameinfo(v4, nil, 100) or mac
    			if name and name ~= v4 then
    				callback(v4, name)
    			end
    		end)
    	else
    		local rv = { }
    		_nethints(2, function(mac, v4, v6, name)
    			name = name or nixio.getnameinfo(v4, nil, 100) or mac
    			if name and name ~= v4 then
    				rv[#rv+1] = { v4, name }
    			end
    		end)
    		return rv
    	end
    end
    
    --          Each entry contains the values in the following order:
    --          [ "ip", "name" ]
    function net.ipv6_hints(callback)
    	if callback then
    		_nethints(3, function(mac, v4, v6, name)
    			name = name or nixio.getnameinfo(v6, nil, 100) or mac
    			if name and name ~= v6 then
    				callback(v6, name)
    			end
    		end)
    	else
    		local rv = { }
    		_nethints(3, function(mac, v4, v6, name)
    			name = name or nixio.getnameinfo(v6, nil, 100) or mac
    			if name and name ~= v6 then
    				rv[#rv+1] = { v6, name }
    			end
    		end)
    		return rv
    	end
    end
    
    function net.host_hints(callback)
    	if callback then
    		_nethints(1, function(mac, v4, v6, name)
    			if mac and mac ~= "00:00:00:00:00:00" and (v4 or v6 or name) then
    				callback(mac, v4, v6, name)
    			end
    		end)
    	else
    		local rv = { }
    		_nethints(1, function(mac, v4, v6, name)
    			if mac and mac ~= "00:00:00:00:00:00" and (v4 or v6 or name) then
    				local e = { }
    				if v4   then e.ipv4 = v4   end
    				if v6   then e.ipv6 = v6   end
    				if name then e.name = name end
    				rv[mac] = e
    			end
    		end)
    		return rv
    	end
    end
    
    function net.conntrack(callback)
    	local ok, nfct = pcall(io.lines, "/proc/net/nf_conntrack")
    	if not ok or not nfct then
    		return nil
    	end
    
    	local line, connt = nil, (not callback) and { }
    	for line in nfct do
    		local fam, l3, l4, timeout, tuples =
    			line:match("^(ipv[46]) +(%d+) +%S+ +(%d+) +(%d+) +(.+)$")
    
    		if fam and l3 and l4 and timeout and not tuples:match("^TIME_WAIT ") then
    			l4 = nixio.getprotobynumber(l4)
    
    			local entry = {
    				bytes = 0,
    				packets = 0,
    				layer3 = fam,
    				layer4 = l4 and l4.name or "unknown",
    				timeout = tonumber(timeout, 10)
    			}
    
    			local key, val
    			for key, val in tuples:gmatch("(%w+)=(%S+)") do
    				if key == "bytes" or key == "packets" then
    					entry[key] = entry[key] + tonumber(val, 10)
    				elseif key == "src" or key == "dst" then
    					if entry[key] == nil then
    						entry[key] = luci.ip.new(val):string()
    					end
    				elseif key == "sport" or key == "dport" then
    					if entry[key] == nil then
    						entry[key] = val
    					end
    				elseif val then
    					entry[key] = val
    				end
    			end
    
    			if callback then
    				callback(entry)
    			else
    				connt[#connt+1] = entry
    			end
    		end
    	end
    
    	return callback and true or connt
    end
    
    function net.devices()
    	local devs = {}
    	for k, v in ipairs(nixio.getifaddrs()) do
    		if v.family == "packet" then
    			devs[#devs+1] = v.name
    		end
    	end
    	return devs
    end
    
    
    function net.deviceinfo()
    	local devs = {}
    	for k, v in ipairs(nixio.getifaddrs()) do
    		if v.family == "packet" then
    			local d = v.data
    			d[1] = d.rx_bytes
    			d[2] = d.rx_packets
    			d[3] = d.rx_errors
    			d[4] = d.rx_dropped
    			d[5] = 0
    			d[6] = 0
    			d[7] = 0
    			d[8] = d.multicast
    			d[9] = d.tx_bytes
    			d[10] = d.tx_packets
    			d[11] = d.tx_errors
    			d[12] = d.tx_dropped
    			d[13] = 0
    			d[14] = d.collisions
    			d[15] = 0
    			d[16] = 0
    			devs[v.name] = d
    		end
    	end
    	return devs
    end
    
    
    --			The following fields are defined for route entry tables:
    --			{ "dest", "gateway", "metric", "refcount", "usecount", "irtt",
    --			  "flags", "device" }
    function net.routes(callback)
    	local routes = { }
    
    	for line in io.lines("/proc/net/route") do
    
    		local dev, dst_ip, gateway, flags, refcnt, usecnt, metric,
    			  dst_mask, mtu, win, irtt = line:match(
    			"([^%s]+)\t([A-F0-9]+)\t([A-F0-9]+)\t([A-F0-9]+)\t" ..
    			"(%d+)\t(%d+)\t(%d+)\t([A-F0-9]+)\t(%d+)\t(%d+)\t(%d+)"
    		)
    
    		if dev then
    			gateway  = luci.ip.Hex( gateway,  32, luci.ip.FAMILY_INET4 )
    			dst_mask = luci.ip.Hex( dst_mask, 32, luci.ip.FAMILY_INET4 )
    			dst_ip   = luci.ip.Hex(
    				dst_ip, dst_mask:prefix(dst_mask), luci.ip.FAMILY_INET4
    			)
    
    			local rt = {
    				dest     = dst_ip,
    				gateway  = gateway,
    				metric   = tonumber(metric),
    				refcount = tonumber(refcnt),
    				usecount = tonumber(usecnt),
    				mtu      = tonumber(mtu),
    				window   = tonumber(window),
    				irtt     = tonumber(irtt),
    				flags    = tonumber(flags, 16),
    				device   = dev
    			}
    
    			if callback then
    				callback(rt)
    			else
    				routes[#routes+1] = rt
    			end
    		end
    	end
    
    	return routes
    end
    
    --			The following fields are defined for route entry tables:
    --			{ "source", "dest", "nexthop", "metric", "refcount", "usecount",
    --			  "flags", "device" }
    function net.routes6(callback)
    	if fs.access("/proc/net/ipv6_route", "r") then
    		local routes = { }
    
    		for line in io.lines("/proc/net/ipv6_route") do
    
    			local dst_ip, dst_prefix, src_ip, src_prefix, nexthop,
    				  metric, refcnt, usecnt, flags, dev = line:match(
    				"([a-f0-9]+) ([a-f0-9]+) " ..
    				"([a-f0-9]+) ([a-f0-9]+) " ..
    				"([a-f0-9]+) ([a-f0-9]+) " ..
    				"([a-f0-9]+) ([a-f0-9]+) " ..
    				"([a-f0-9]+) +([^%s]+)"
    			)
    
    			if dst_ip and dst_prefix and
    			   src_ip and src_prefix and
    			   nexthop and metric and
    			   refcnt and usecnt and
    			   flags and dev
    			then
    				src_ip = luci.ip.Hex(
    					src_ip, tonumber(src_prefix, 16), luci.ip.FAMILY_INET6, false
    				)
    
    				dst_ip = luci.ip.Hex(
    					dst_ip, tonumber(dst_prefix, 16), luci.ip.FAMILY_INET6, false
    				)
    
    				nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false )
    
    				local rt = {
    					source   = src_ip,
    					dest     = dst_ip,
    					nexthop  = nexthop,
    					metric   = tonumber(metric, 16),
    					refcount = tonumber(refcnt, 16),
    					usecount = tonumber(usecnt, 16),
    					flags    = tonumber(flags, 16),
    					device   = dev,
    
    					-- lua number is too small for storing the metric
    					-- add a metric_raw field with the original content
    					metric_raw = metric
    				}
    
    				if callback then
    					callback(rt)
    				else
    					routes[#routes+1] = rt
    				end
    			end
    		end
    
    		return routes
    	end
    end
    
    function net.pingtest(host)
    	return os.execute("ping -c1 '"..host:gsub("'", '').."' >/dev/null 2>&1")
    end
    
    
    process = {}
    
    function process.info(key)
    	local s = {uid = nixio.getuid(), gid = nixio.getgid()}
    	return not key and s or s[key]
    end
    
    function process.list()
    	local data = {}
    	local k
    	local ps = luci.util.execi("/bin/busybox top -bn1")
    
    	if not ps then
    		return
    	end
    
    	for line in ps do
    		local pid, ppid, user, stat, vsz, mem, cpu, cmd = line:match(
    			"^ *(%d+) +(%d+) +(%S.-%S) +([RSDZTW][W ][<N ]) +(%d+) +(%d+%%) +(%d+%%) +(.+)"
    		)
    
    		local idx = tonumber(pid)
    		if idx then
    			data[idx] = {
    				['PID']     = pid,
    				['PPID']    = ppid,
    				['USER']    = user,
    				['STAT']    = stat,
    				['VSZ']     = vsz,
    				['%MEM']    = mem,
    				['%CPU']    = cpu,
    				['COMMAND'] = cmd
    			}
    		end
    	end
    
    	return data
    end
    
    function process.setgroup(gid)
    	return nixio.setgid(gid)
    end
    
    function process.setuser(uid)
    	return nixio.setuid(uid)
    end
    
    process.signal = nixio.kill
    
    
    user = {}
    
    --				{ "uid", "gid", "name", "passwd", "dir", "shell", "gecos" }
    user.getuser = nixio.getpw
    
    function user.getpasswd(username)
    	local pwe = nixio.getsp and nixio.getsp(username) or nixio.getpw(username)
    	local pwh = pwe and (pwe.pwdp or pwe.passwd)
    	if not pwh or #pwh < 1 or pwh == "!" or pwh == "x" then
    		return nil, pwe
    	else
    		return pwh, pwe
    	end
    end
    
    function user.checkpasswd(username, pass)
    	local pwh, pwe = user.getpasswd(username)
    	if pwe then
    		return (pwh == nil or nixio.crypt(pass, pwh) == pwh)
    	end
    	return false
    end
    
    function user.setpasswd(username, password)
    	if password then
    		password = password:gsub("'", [['"'"']])
    	end
    
    	if username then
    		username = username:gsub("'", [['"'"']])
    	end
    
    	return os.execute(
    		"(echo '" .. password .. "'; sleep 1; echo '" .. password .. "') | " ..
    		"passwd '" .. username .. "' >/dev/null 2>&1"
    	)
    end
    
    
    wifi = {}
    
    function wifi.getiwinfo(ifname)
    	local stat, iwinfo = pcall(require, "iwinfo")
    
    	if ifname then
    		local d, n = ifname:match("^(%w+)%.network(%d+)")
    		local wstate = luci.util.ubus("network.wireless", "status") or { }
    
    		d = d or ifname
    		n = n and tonumber(n) or 1
    
    		if type(wstate[d]) == "table" and
    		   type(wstate[d].interfaces) == "table" and
    		   type(wstate[d].interfaces[n]) == "table" and
    		   type(wstate[d].interfaces[n].ifname) == "string"
    		then
    			ifname = wstate[d].interfaces[n].ifname
    		else
    			ifname = d
    		end
    
    		local t = stat and iwinfo.type(ifname)
    		local x = t and iwinfo[t] or { }
    		return setmetatable({}, {
    			__index = function(t, k)
    				if k == "ifname" then
    					return ifname
    				elseif x[k] then
    					return x[k](ifname)
    				end
    			end
    		})
    	end
    end
    
    
    init = {}
    init.dir = "/etc/init.d/"
    
    function init.names()
    	local names = { }
    	for name in fs.glob(init.dir.."*") do
    		names[#names+1] = fs.basename(name)
    	end
    	return names
    end
    
    function init.index(name)
    	if fs.access(init.dir..name) then
    		return call("env -i sh -c 'source %s%s enabled; exit ${START:-255}' >/dev/null"
    			%{ init.dir, name })
    	end
    end
    
    local function init_action(action, name)
    	if fs.access(init.dir..name) then
    		return call("env -i %s%s %s >/dev/null" %{ init.dir, name, action })
    	end
    end
    
    function init.enabled(name)
    	return (init_action("enabled", name) == 0)
    end
    
    function init.enable(name)
    	return (init_action("enable", name) == 1)
    end
    
    function init.disable(name)
    	return (init_action("disable", name) == 0)
    end
    
    function init.start(name)
    	return (init_action("start", name) == 0)
    end
    
    function init.stop(name)
    	return (init_action("stop", name) == 0)
    end
    

    就是那里net那里,改一下。或者直接把所有的代码复制进去就行。

    展开全文
  • 以 Lean's OpenWrt source 为例注意:不要用 root 用户 git 和编译!!!国内用户编译前最好准备好梯子默认登陆 IP 192.168.1.1, 密码 pass­word准备编译系统推荐使用的编译系统环境:Ubuntu 18 LTS x64初次编译:...

    以 Lean's OpenWrt source 为例

    注意:

    1. 不要用 root 用户 git 和编译!!!
    2. 国内用户编译前最好准备好梯子
    3. 默认登陆 IP 192.168.1.1, 密码 pass­word
    4. 准备编译系统

    推荐使用的编译系统环境:Ubuntu 18 LTS x64

    初次编译:


    • 更新编译系统
    sudo apt-get update
    • 配置编译环境
    sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 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 g++-multilib antlr3 gperf
    • 下载 lede 源码
    git clone https://github.com/coolsnowwolf/lede
    • 进入 lede 目录
    cd lede
    • 更新软件包
    ./scripts/feeds update -a./scripts/feeds install -a
    • 调整固件参数
    make menuconfig
    • 下载 dl 库(国内请尽量全局科学上网)
    make download V=s
    • 开始编译固件(-j1 后面是线程数,第一次编译推荐用单线程)
    make -j1 V=s

    二次编译:


    • 进入 lede 目录
    cd lede
    • 更新 lede 源码
    git pull
    • 更新 FEEDS
    ./scripts/feeds update -a && ./scripts/feeds install -a
    • 补全配置 *
    make defconfig
    • 下载源码
    make -j8 download
    • 开始编译
    make -j$(($(nproc) + 1)) V=s

    如需重新配置*

    • 清除编译配置和缓存
    rm -rf ./tmp && rm -rf .config
    • 进入配置菜单
    make menuconfig
    8b7021dc6386d76624a90b702cf53b57.png
    • 开始编译
    make -j$(($(nproc) + 1)) V=s

    编译完成后输出路径:/lede/bin/targets


    进阶玩法

    生成差异配置,可用于 GitHub Actions 云编译 OpenWrt

    ./scripts/diffconfig.sh > config.seed
    展开全文
  • 如何编译自己需要的 OpenWrt 固件 注意: 不要用 root 用户进行编译!!! 国内用户编译前最好准备好梯子 默认登陆IP 192.168.1.1 密码 password 免责声明:本人不欢迎例如 nobk 这种傻逼使用或者访问本源代码...
  • LEDE 所有固件地址 https://drive.google.com/drive/folders/1dqNUrMf9n7i3y1aSh68U5Yf44WQ3KCuh lede 源码 : https://github.com/coolsnowwolf/lede https://github.com/AnonymousCyberWarrior/lede ...

    LEDE 所有固件地址

    https://drive.google.com/drive/folders/1dqNUrMf9n7i3y1aSh68U5Yf44WQ3KCuh

     

     

    lede 源码 :

     

    https://github.com/coolsnowwolf/lede

    https://github.com/AnonymousCyberWarrior/lede

     

     

    Openwrt 官方下载地址

    https://downloads.openwrt.org/releases/

     

    Openwrt DL目录软件下载源地址

    https://sources.openwrt.org

     

    LEDE 第三方的软件园,解决官方不能下载的问题,软件园来自 中国科技大学

    http://mirrors.ustc.edu.cn/lede/releases/18.06.1/targets/

     

     

    ipk生成路径

    bin/packages/mipsel_24kc/base

     

     

    如下界面是 OpenWRT 系统版本界面,由于2018年 Openwrt 和 LEDE 分家了,不过后来又合起来了,所以从 17.01.6 ~ 18.06.0 进行了比较大的更改。所以可能出现17的版本以前的软件插件能用,

    但是换到18版本上可能不兼容不能用的情况,所以你要根据你的 OpenWrt 系统版本来安装对应的版本的软件

     

     

     

    packages 里面是存放软件包 IPK 文件 都在这个里面

     

     

    targets 是刷机的时候所用到的固件,那么下面列表罗列的都是 CPU 型号 ,例如 网件 cpu型号 X86 , arc7100 , ar71xx , 树莓派 等这些 CPU 型号;

    说白了就是在下载 targets 中的固件的时候你要弄清你的 路由器是什么型号 CPU是什么 然后再来 targets 中找相应的固件下载即可

     

    以 ar71xx 为例 ,在 targets 中的 generic 是你这个路由器型号或者CPU的对应的所有的固件

     

     

    要注意 img 和 bin 为后缀文件的是干什么的,wndr3800-squashfs-factory.img 是路由器的初始镜像出厂设置的固件,当你刷入wndr3800-squashfs-factory.img 这个固件的时候,以后你如果回复

    出厂设置的时候系统会回复到 wndr3800-squashfs-factory.img 这个固件 ,wndr3800-squashfs-sysupgrade.bin 这个是系统更新,

     

     

    Packages 软件包 :回来再说软件包,当我们刷好系统之后都需要安装相应的软件,那么就要去 packages 里面去找对应系统对应路由型号的软件。这个软件在软件中心进行设置

     

     

    使用 LEDE 开发属于自己的 Openwrt :

    开发自己的路由器 可以使用 LEDE 大神 Github 开源的 LEDE 项目,因为这个 LEDE 项目本身包含了大部分常用的 IPK 文件

    下图是说明feeds砸死那个目录中执行的 openWrt/lede/scripts 在这个目录中执行的 feeds 命令的

    注意:

    1.不要用root用户git和编译!!!

    2.国内用户编译前最好准备好梯子

    3.默认登陆IP 192.168.1.1,密码密码

     

    编译命令如下:

     

    1.首先装好Ubuntu 64bit,推荐Ubuntu 14 LTS x64

     

    2.命令行输入sudo apt-get update,然后输入

    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

     

    3. git clone https://github.com/coolsnowwolf/lede命令下载好源代码,然后cd lede进入目录

     

     

     

    4. ./scripts/feeds update -a

    // 下面这一步是安装 Luci 固件的,正常 lede编译之后如果不执行这个命令是没有 Luci 的

       ./scripts/feeds install -a

       make menuconfig

     

    5.最后选好你要的路由,输入make -j1 V = s(-j1后面是线程数。第一次编译推荐用单线程,国内请尽量全局科学上网)即可开始编译你要的固件了。

     

     

    本套代码保证肯定可以编译成功。里面包括了R9所有源代码,包括IPK的。

     

     

    你可以自由使用,但源码编译二次发布请注明我的GitHub仓库链接。谢谢合作!

     

    工具链和固件的配置。

     

    你需要安装gcc,binutils,bzip2,flex,python,perl,make,

    find,grep,diff,unzip,gawk,getopt,subversion,libz-dev和libc headers。

     

    安装 feeds :feeds 就是非官方的包 ; 官方的包是都放在 packages 下面的

    运行“./scripts/feeds update -a”以获取所有最新的包定义

    分别在feeds.conf / feeds.conf.default中定义

    和./scripts/feeds install -a“将所有这些符号链接安装到其中

    包/馈送/。

     

    使用“make menuconfig”配置图像。

     

    只需运行“make”即可构建你的固件。

    它将下载所有源代码,构建交叉编译工具链,

    内核和所有选择的应用程序。

     

    要构建自己的固件,您需要访问Linux,BSD或MacOSX系统

    (需要区分大小写的文件系统)。Cygwin因为而不受支持

    文件系统中缺乏区分大小写。

     

    注意:在./package/lean目录中添加Lean的私有包源代码。在GPL v3下使用它。

     

    GPLv3与GPLv2兼容的许可证数量更多:它允许您与具有GPLv3本身不具备的特定种类附加要求的代码组合。第7节提供了有关此内容的更多信息,包括允许的其他要求列表。

     

     

     

     

    下面是编辑定制软路由的设置

     

    编译OpenWrt 固件不要使用 root 用户编译,具体原因不知,指示前清提示。

     

    Target System :你要知道你耍的路由器是什么芯片或是CPU,这个Target System描述的就是 芯片或是cpu大体型号

    Subtarget : 这一项是选择具体是哪一个平台的 32位 64位

    Target Profile : 这一现选择具体是路由器 或者 树莓派 斐讯K3 的具体是型号 例如 路由器是 网件arm7100。树莓派是repistry pi  斐讯是K3的型号

     

     

    OpenWrt 主界面

     

    首先选择系统架构,选择 Target System 出现如下界面 :

     

    因为我们使用的是软路由,所以系统选择 X86架构 Select 然后回车即可

     

    在选择 Subtarget  也是选择 x86_64 ,Subtarget 此项的选择依赖于 Target System 这个选项

     

     

    选择 Target Profile 回车进入 出现如下界面:默认是选择 Generic 的 Select 回车

     

     

     选择 Target Image 出现如下界面

     

    途中的 Squashfs 很重要,要选择此项

     

     

    OpenWrt 主界面选择 Global build Setting 出现如下界面:

     

    OpenWrt 主界面有几个带方括号的 选项,对于软路由可以直接忽略不设置

     

     

    OpenWrt 主界面 Base system 选项出现如下界面:

    当进入到 Base system 里面的时候,有个选项叫 dnsmsp-full ,可以看到这个选项是默认选中的,这个选项默认选中可就不要选择 dnsmsp-full 下面别的选项了,因为这样在编译的时候会编译失败,会发生冲突,

    导致编译失败 ; 

    如果你有 DHCPv6 的需求可以选择此项,没有可以不选,当然选了没啥关系,哈哈 这里有点2b了 ;

    USE FULLCOMENAT 这个选项可以提高游戏的性能,

     

     

     

    从 OpenWrt 主界面进入 Administration 

     

     

    接下来 从 Boot Loaders ~ Libraries 折几个选项可以都不用管(软路由)

     

     

    1.所有的系统主业都在 LuCI 里面定制

     

     

     

    2.进入LuCI 选择 Applications

     

    进入 Applications 之后你会看到如下界面,这里就是整个Applications的精华所在了。

     

     

     

    Luci-addbyby-plus :

        这个选项是用来拦截广告的,如果你需要去视频网站广告的话需要将这个选项选上。

     

    Luci-app-aria2 :

        这是一个下载工具,对于bt种子文件的支持,支持还是蛮好的,可以离线下载百度云上的文件

     

    luci-app-DDNS :luci support for Dynamic DNS client (DDNS Scripts)

        如果你有远程访问家里的软路由,甚至访问家里的NAS的服务需求,那么这个选项可以帮你拿到家里的外网IP地址,

     

    luci-app-frpc :

         这个选项做过内网穿透的就不陌生了,是做内网穿透用的支持项

     

    luci-app-hd-idel :

        是如果你的软路由链接了硬盘不管是做下载还是做文件共享,都可以在不使用硬盘的时候让硬盘能够休眠,提高硬盘的使用寿命

     

    Luci-app-mwan3  和  Luci-app-mwan3-helper 

        如果你现在使用 Wireguard 翻墙的话,即使 wirguard 是一个全局翻墙软件,那么你扔可以使用这两个软件选项帮助你做分流。

     

    luci-app-sfe :

        这个组件主要是做NAT的转发加速的。

     

    luci-app-ssr-plus :(SS / SSR / V2Ray Luci interface)

         include   Kcptun (Kcptun 加速)

         include   ShadowsockesR Server (SSR 服务器)

         include   ShadowsockesR Socks and Tunnel () 

    如下图,将 ssr-plus的下面的方括号的选项全部都选上

     

    luci-app-ssr-pro

        同上如同 ssrplus 一样

     

    luci-app-ssrserver-python

        同上如同 ssrplus 一样

     

    luci-app-V2Ray-pro :

       如果怕平时是使用V2Ray 协议,那么只需要安装这个选项即可

     

    luci-app-vlmcsd :Luci Support for KMS

        这个组件是用来激活大客户版的 Office windows 的

       

     

     

     

     

    选择 Download Manager

     

    这三个选项都是 aria2 的网页版前端展示的,都是调用 aria2 做下载的,这三个组件你选择哪个都可以因为功能都是一样的。推荐选择第一个吧

     

    选择好之后退出 Download Manager 继续退出 Network ,返回到主界面 选择 Editors

     

    进入到 Editors 之后,出现如下界面 :

     

    Editors-nano :

         是在编辑或者修改一些文本文件的时候,会比系统自带的 VI VIM 自带的工具好用的多。

     

     

    选择好之后推出到 OperWrt Configuration ,然后选择 Save 保存我们的设置选项

     

    系统弹出提示 选择 Yes 即可 编译完成

     

     

     

     

    最后使用 make 命令编译进行打包,第一次编译会很慢非常慢,因为初次编译会下载我们上面操作的一些组件的安装包还有一些支持依赖程序等( make /30~90Min)

    make -j1 V=s

     

    -j后面跟线程数 写 -j1 表示单线程编译

    V=s。表示编译过程中的日志显示,会把编译过程中的正确的错误的日志展示出来,方便你知道那里出现了错误或是本次编译完美运行没有任何错误。

    展开全文
  • 编译LEDE-Openwrt系统

    千次阅读 2017-10-13 16:01:59
    开发过程中,需要打开lede-openwrt的direct_IO选项,因此需要自己编译系统。记录一下。 1. 安装依赖包 开发环境为Ubuntu。安装编译依赖的包:(参见http://www.sohu.com/a/115102879_424963) sudo ...
  • 开始后到Actions里面单击《 lede-x86-64固件》,然后再单击左上角的《编译OpenWrt-lede固件》可以查看编译情况了(单击Actions后如果没看到运行立即刷新下网页,刷新网页后还是没运行就把★Unstar点一下变☆Star然后...
  • 首先我分享一个自己编译的:网件WNDR3700v4-lede-SNAPSHOT固件。 从网上找了一些openwrt、lede固件编译的教程,一步步做下去,虽然中间走了些弯路,但后来还是顺利编译成功了,这才发现编译简单的LEDE固件也没那么...
  • 最近在编译cmus的时候发现不支持MP3...遂自己编译libmad(嵌入式linux发行版,没这个包) 编译的时候需要特别注意一点,gcc4.3之后移除了对-fforce-mem特性的支持,所以需要手动更改一下Makefile文件。搜索一下force-m
  • 首先我分享一个自己编译的:网件WNDR3700v4-lede-SNAPSHOT固件。 从网上找了一些openwrt、lede固件编译的教程,一步步做下去,虽然中间走了些弯路,但后来还是顺利编译成功了,这才发现编译简单的LEDE固件也没那么...
  • 软路由openwrt Lede(x86_x64)编译

    万次阅读 2019-02-22 10:36:51
    想用它来做软路由发现对应的只有Koolshare lede V2.9 版能使用,后面在恩山论坛发现Lean大神帖子,看到他的源码已经放上Github,包含了众多主流硬路由、arm、博通、联发科等等的驱动,有需要可以自己编译。...
  • 入门培训班教学视频演讲稿提纲,虽是内部资料但再三考虑后对外公布,通过公众的监督来鞭策自己。如对完整内容感兴趣,可以参加"跟着佐大学OpenWrt开发"入门培训班:...
  • lede-lean-源码

    2021-03-10 02:25:42
    如何编译自己需要的OpenWrt固件 注意: 不要用根用户进行编译! 默认登陆IP 192.168.1.1密码 免责声明:本人不欢迎例如nobk这种傻逼使用或访问本源代码哪怕一个字节,否则一旦他家里因此而发生各种全家富贵的情况,...
  • Phicomm K2P Openwrt自动构建|斐讯K2P Openwrt自动编译(每周一早8点) 使用Github Actions为Phicomm K2P自定义自己的OpenWrt固件。 | | | 用法 星号和叉 单击您自己的分叉存储库的Action按钮 单击所有工作流程下...
  • Lede-N1-源码

    2021-03-18 01:27:41
    这里只说发布release的方法,部分代码整合或使用和大神: 1,自动编译及自动发布你也可以使用本仓库模板,请点击上方的使用此模板(使用此模板)来创建你自己的新仓库。 2,点击右上角你的头像-设置-开发人员设置-...
  • lede-2-源码

    2021-02-11 09:53:48
    中文:如何编译自己需要的OpenWrt固件 注意: 不要用根用户进行编译! 国内用户编译前最好准备好梯子 默认登陆IP 192.168.1.1,密码 免责声明:本人不欢迎例如nobk这种傻逼使用或访问本源代码哪怕一个字节,否则一旦...
  • 版本一:open-lede账号:root,密码password,地址192.168.1.1可以自己修改ip,建议改成不和光猫一个网段版本二:padavan(鸡血驱动无线信号牛!)账号:ADMin,密码:admin,地址:10.10.10.1,为了你们不ip冲突!...
  • Lede-con-419-123-源码

    2021-02-14 11:20:44
    选择Lede_phicomm_n1或Project_phicomm_n1的副本文件夹编译的话,会自动编译出(N1,微加云,贝壳云,我家云,S9xxx)OpenWrt固件,固件已经自动打包好【】 除了编译openwrt以外,其他副本都直接打入了常用插件了,...
  • 主控AR7240+9283 ,自己编译的最新版LEDE 17.01,本固件带不死BREED,并添加了高通fast path 和SFE转发加速引擎,亲测完美使用,可以自由关闭和打开,无BUG
  • 主控AR7240+9283 ,自己编译的最新版LEDE 17.01,刷好后自带不死BREED. 添加高通fast path 和SFE转发加速引擎,亲测完美使用,可以自由关闭和打开,无BUG
  • 如何编译自己需要的OpenWrt固件 注意: 不要用根用户进行编译! 国内用户编译前最好准备好梯子 默认登陆IP 192.168.1.1密码 免责声明:本人不欢迎例如nobk这种傻逼使用或访问本源代码哪怕一个字节,否则一旦他家里...
  • 自己编译lean的openwrt

    2021-02-19 21:22:40
    参考文章 使用win10自己编译lean大大的openwrt,要什么功能自己选,保证没后门 手把手教编译Lean大的OpenWrt(附Lienol先生 的...lean:https://github.com/coolsnowwolf/lede Lienol-openwrt-packages-backup ...
  • 主控AR7240+9283 ,自己编译的最新版LEDE 17.01,本固件带不死BREED,并添加了高通fast path 和SFE转发加速引擎,亲测完美使用,可以自由关闭和打开,无BUG
  • lede-n1907-lienol-新-源码

    2021-02-16 09:21:20
    无需专业知识,无需Linux服务器,人人皆可通过云编译定制编译自己的专属固件。 持续更新,每周日零点定时自动云编译更新固件,不用再担心因停更而需更换固件。 设备 固件下载 说明 X86_64 请分配多余于1G的存储空间 ...
  • 软路由另类自己编译自己升级实现方法,kvm虚拟机跑OP,在网页内部升级会出现奇葩错误,所以采用了直接替换img的方法,这个方法简单,而且快速。关于op内部的设置文件,可以使用files大法来完成,在lede目录下依次...
  • 主控AR9344+8035双频无线AP ,自己编译的最新版LEDE 17.01,本固件带不死BREED,(注意!!! 不死BREED软件中断后,可能要插拔网线才检测得到,只是可能,我这台就要插拔网线才可以中断并进入不死页面) ,添加了...
  • 自动从lean的lede源码克隆并生成竞斗云固件 将本项目fork到自己的账号下,进行以下操作即可得到专属定制固件 1.diy.sh可以编辑自定义和修改的脚本,可以直接修改JK替换的脚本,也可以自己编写 2.gdockfull128.config...
  • 笔者最近更换了HomeLEDE固件,但发现其没有集成网络打印机。...根据自己平台下载好相应的包(有十多个都是)后,上传到LEDE的tmp目录下,(其中cups-filters这个包好像和cups不太兼容,我选择删去cu
  • 想找一个k2p的openwrt固件 无奈太多无用插件 于是自己动手编译x86固件也可以编译 学习于恩山论坛项目地址https://github.com/coolsnowwolf/lede虚拟机 Ubuntu 18 LTS x64 普通用户登陆编译安装编译依赖sudo apt-get ...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

lede自己编译