mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-31 19:17:12 +00:00
4269914187
Reading and writing to and from flash storage is slowed down
enormously by some functions which use a block size of 1.
This patch reworks the extraction scripts to be much faster and
efficient by reading and writing in possibly one big block.
This is based on the initial commit a69e101
for ipq40xx by
Christian Lamparter <chunkeey@gmail.com>.
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Tested-by: Rosen Penev <rosenp@gmail.com>
79 lines
1.7 KiB
Bash
79 lines
1.7 KiB
Bash
#!/bin/sh
|
|
|
|
rt2x00_eeprom_die() {
|
|
echo "rt2x00 eeprom: " "$*"
|
|
exit 1
|
|
}
|
|
|
|
rt2x00_eeprom_extract() {
|
|
local part=$1
|
|
local offset=$2
|
|
local count=$3
|
|
local mtd
|
|
|
|
mtd=$(find_mtd_part $part)
|
|
[ -n "$mtd" ] || \
|
|
rt2x00_eeprom_die "no mtd device found for partition $part"
|
|
|
|
dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
|
|
rt2x00_eeprom_die "failed to extract from $mtd"
|
|
}
|
|
|
|
jboot_eeprom_extract() {
|
|
local part=$1
|
|
local offset=$2
|
|
local mtd
|
|
|
|
mtd=$(find_mtd_part $part)
|
|
[ -n "$mtd" ] || \
|
|
rt2x00_eeprom_die "no mtd device found for partition $part"
|
|
|
|
jboot_config_read -i $mtd -o $offset -e /lib/firmware/$FIRMWARE 2>/dev/null || \
|
|
rt2x00_eeprom_die "failed to extract from $mtd"
|
|
}
|
|
|
|
rt2x00_eeprom_set_macaddr() {
|
|
local macaddr=$1
|
|
|
|
[ -n "$macaddr" ] || \
|
|
rt2x00_eeprom_die "invalid wlan mac address"
|
|
|
|
macaddr_2bin $macaddr | dd of=/lib/firmware/$FIRMWARE \
|
|
conv=notrunc oflag=seek_bytes bs=6 seek=4 count=1 2>/dev/null || \
|
|
rt2x00_eeprom_die "failed to write mac address to eeprom file"
|
|
}
|
|
|
|
FW="/lib/firmware/$FIRMWARE"
|
|
[ -e "$FW" ] && exit 0
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/system.sh
|
|
|
|
board=$(board_name)
|
|
|
|
case "$FIRMWARE" in
|
|
"soc_wmac.eeprom")
|
|
case $board in
|
|
dlink,dwr-116-a1|\
|
|
dlink,dwr-118-a1|\
|
|
dlink,dwr-118-a2|\
|
|
dlink,dwr-921-c1|\
|
|
dlink,dwr-922-e2|\
|
|
lava,lr-25g001)
|
|
wan_mac=$(jboot_config_read -m -i $(find_mtd_part "config") -o 0xE000)
|
|
wifi_mac=$(macaddr_add "$wan_mac" 1)
|
|
jboot_eeprom_extract "config" 0xE000
|
|
rt2x00_eeprom_set_macaddr $wifi_mac
|
|
;;
|
|
tiny-ac)
|
|
wifi_mac=$(mtd_get_mac_ascii u-boot-env INIC_MAC_ADDR)
|
|
rt2x00_eeprom_extract "factory" 0 512
|
|
rt2x00_eeprom_set_macaddr $wifi_mac
|
|
;;
|
|
*)
|
|
rt2x00_eeprom_die "Please define mtd-eeprom in $board DTS file!"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|