Перейти к содержанию
    

vgovseychuk

Участник
  • Постов

    49
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о vgovseychuk

  • Звание
    Участник
    Участник

Посетители профиля

1 634 просмотра профиля
  1. Ну это уже нюансы, которыми в данном вопросе можно пренебречь, тем более у хороших литиевых saft-ов саморазряд мизерный. =) А 5 минут не много ли? У меня еще давным давно(лет 5 назад) на SIM900 при средней сети в 30-40 секунд укладывалась передача и пакеты там больше были.
  2. Про тип сети: 2G намного дешевле, и на практике для таких задач есть смысл использовать только 2G. Про цены: сложно сказать, но для примера максимальную планку выставляем из среднего арифметического от EB-870A, GL865-DUAL V3, Cinterion BGS2, умноженного на 2 =) Про пункт назначения: для примера по минимуму, простой tcp сокет. и какой ток потребления при этом?
  3. Привет, Электроникс! Наверно, завсегдатаи этой ветки побъют меня, но я все же хочу прояснить кое-что касательно того, что можно выжать в плане энергопотребления при работе от батареи из модулей, работающих в наших сотовых сетях? Общий смысл таков: 1. Есть теоретический модуль, управляемый микроконтроллером и питающийся от батареи, допустим, 3.6В. 2. 99.9 процентов времени модуль отключен, а живет, точнее спит, только микроконтроллер, потребляя 1-2мкА. 3. 1 раз в сутки надо проснуться и передать на сервер, например, по tcp 1кБ данных. 4. Естественно, модулю надо некоторое время на то, чтобы найти сеть и установить связь. 5. Еще есть батарейка, которую наверняка надо депассивировать для таких токов(1-2A). Вопросы следующие(просто по вашему опыту): 1. Сколько времени пройдет с момента включения питания модуля до начала передачи того самого 1кБ данных. 2. Сколько энергии съест модуль за это время и сколько за время передачи? 3. Посоветуйте модуль, который сожрет меньше остальных при таком режиме(в схожей теме звучали EB-870A, GL865-DUAL V3, Cinterion BGS2) Заранее спасибо!
  4. Поставил traffic control, выставил ограничение 30Мбит. Вроде, не падает. Скрипт: tc qdisc add dev eth0 root handle 1:0 hfsc default 1 tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate 30mbit ul rate 30mbit tc qdisc add dev eth1 root handle 1:0 hfsc default 1 tc class add dev eth1 parent 1:0 classid 1:1 hfsc sc rate 30mbit ul rate 30mbit Еще идеи и критика приветствуются.
  5. Привет, Электроникс Завел я на своей кастомной плате c i.MX287 OpenWRT. На плате 2 Ethernet 100Мбит, объединенные в мост. Все работает на малых скоростях, но как только начинаю тестировать скорость передачи по мосту или перекачивать большие файлы, вся система умирает. Тестировал iperf3: 10Мбит/полный дуплекс - норм, TCP и UDP по 9,5Мбит дают. 100Мбит/полный дуплекс - UDP прокачивает 95Мбит/с, TCP кладет систему 100Мбит/полудуплекс - UDP прокачивает 95Мбит/с, TCP - 75Мбит На больших скоростях загруз проца почти 100 (95% sirq) Лог падения приложу ниже(парсер не срабатывает). Отсюда вопрос: как можно притормаживать Ethernet, чтобы избежать переполнения очереди? P.S. Как я понял, проблема эта давняя, но нигде не могу найти нормального решения. Размеры очереди и обрезку кадров в драйвере менял - не помогло. Спасает только ограничение скорости, но 10 Мбит или полудуплекс не хочется оставлять. log.txt
  6. Посмотрел код U-Boot (cmd_nand.c). Просто nand read(write) тоже учитывает бэдблоки: (в районе 690 строки) ret = nand_read_skip_bad(nand, off, &rwsize, NULL, maxsize, (u_char *)addr); Методом проверки на своем девайсе (как раз бэдблок в root) выяснил, что вроде все так. Только есть нюанс: если мы записываем из линукса файл в UBI, и передаем в переменную бута его размер(как в линуксе), этот размер не сойдется с размером для убута. В итоге при перезаписи целостность не сохранится и как минимум получаем предупреждение: UBI warning: ubi_io_read: error -74 (ECC error) while reading 2048 bytes from PEB 1206:2048, read only 2048 bytes, retry [ 3.319056] UBI error: ubi_io_read: error -74 (ECC error) while reading 2048 bytes from PEB 1206:2048, read 2048 bytes [ 3.329885] CPU: 0 PID: 1 Comm: swapper Not tainted 3.18.23 #73 [ 3.335829] Backtrace: .... Итог: переразметил так: ---------------------------------------------------------------------- |bootloader| fdt | kernel | updroot | root | MTD | 5M | 256k | 5M | 40M | - | ---------------------------------------------------------------------- |rootfs|rootfs_data| UBI | 40M | - | ----------------------------------------------------------------------
  7. Скрипт для обновления изначальных конфигов, например, или добавления новых файлов. В общем для тех файлов, которые не охвачены менеджером пакетов. Я понимаю, что по-хорошему все файлы должны генериться тем или иным пакетом, но я до этого пока не дошел и почти вручную меняю некоторые конфиги. Пользуюсь U-Boot 2014.10. Не знал, что есть функции nand read(write).jffs2. Думал, что nand write учитывает bad, а write.raw как раз пишет без них. Буду смотреть и пробовать. Вот, это и подозревал, спасибо, исправлю Да, явно перемудрил И еще один вопрос про чтение/запись: Как пример, у меня есть разделы: и vol2 и они "физические", т.е. их видно в mtdparts в U-Boot, и на разделе vol2 есть логические разделы UBI (vol2_ubi1, на котором root ubifs, и vol2_ubi2, куда я пишу обновление). Если я пишу из линукса в vol2_ubi2: mtd write rootfs.img vol2_ubi2 fw_setenv filesize_rootfs $(printf %x $(stat -c %s rootfs.img)) и в vol1: mtd write rootfs.img vol1 fw_setenv filesize_rootfs $(printf %x $(stat -c %s rootfs.img)) то как они запишутся и как их считать правильно в оперативку из U-Boot? vol1 как nand с учетом bad, а vol2_ubi2 как UBI? P.S. Большое спасибо!
  8. Сделал полное обновление немного кривым способом, потеряв где-то 20% места на NAND: выделил разделы под запись обновляемых файлов: updfdt(размер 0х40000), updkernel(0х500000), updroot(последний включен в UBI, 0х2а00000). Из этого вытекает вопрос контроля того, что записали. Я пишу из-под линукса скачанные файлы обновления в запасные разделы командами встроенных утилит: mtd erase updroot mtd write rootfs.img updroot mtd erase updkern mtd write openwrt-mxs-uImage updkern fw_setenv filesize_kernel $(printf %x $(stat -c %s openwrt-mxs-uImage)) mtd erase updfdt mtd write TestTest.dtb updfdt fw_setenv filesize_fdt $(printf %x $(stat -c %s TestTest.dtb)) А из бутлоадера "nand read ${loadaddr} updfdt 0x40000;" "nand erase.part fdt;" "nand write ${loadaddr} fdt 0x40000;" "nand read ${loadaddr} updkern 0x500000;" "nand erase.part kernel;" "nand write ${loadaddr} kernel 0x500000;" "ubi part root; " "ubi read ${loadaddr} updroot 0x2A00000; " "nand erase.part root; " "ubi part root; " "ubi create updroot 0x2A00000; " "ubi create rootfs 0x2A00000; " "ubi create rootfs_data; " "ubi write ${loadaddr} rootfs 0x2A00000" Меня интересуют механизмы работы команд mtd, nand, ubi (проверяют ли они бэдблоки, надо ли следить, что они записали). Например, нет команды mtd read в OpenWrt, и не проверить, правильно ли все записалось. Или как узнать, все ли бутлоадер правильно прочтет, если в разделе есть так любимые NAND-ом бэдблоки. Нормально ли то, что я копирую весь раздел операцией read/write а не размер файла(понятно, что это медленнее, но что будет происходить при наличии бэдблоков)? P.S. В Openwrt есть еще команда nandwrite. Может, ее применять вместо mtd write? P.P.S Посмотрел в коде mtd и nandwrite, вроде, есть проверка бэдблоков при записи.
  9. Вообще да, можно и так. Но это же каждый раз надо вписывать в скрипт, какие пакеты и файлы ты обновлял. Я посчитал такой вариант наиболее верным с оглядкой на то, как это сделано, например, в роутерах. В любом случае, большое спасибо за совет.
  10. Sysupgrade / switch root to ram

    Привет, Электроникс! Пытаюсь обновиться из-под линукса. В sysupgrade нет поддержки UBI, так что пытаюсь сделать обновление вручную. При попытке переписать в лоб - ошибка (хотя mtd write работает): root@TestTest:/# ubiupdatevol dev/ubi0_0 /tmp/rootfs.img [ 2885.328555] UBI error: ubi_open_volume: cannot open device 0, volume 0, error -16 ubiupdatevol: can't open 'dev/ubi0_0': Device or resource busy Посмотрел, как это делает sysupgrade: Сначала копирует необходимые бинарники, а затем переключается на работу из оперативки. У меня переключение рута в tmp/root не удалось (не понял принципа, ибо нуб) В общем интересуют 2 вопроса: 1. Как переключаться на работу из оперативки, освобождая тем самым /dev/ubi0_0? 2. Если есть более удобный способ обновления системы с UBI? P.S. разделы у меня такие: ----------------------------------------------------------------- |bootloader|boot_env| fdt | kernel | root | MTD | 3M | 256k | 128k | 5M | - | ----------------------------------------------------------------- |rootfs|rootfs_data| UBI | 40M | - | ----------------------------------------------------------------- Части системы (fdt, kernel, rootfs) пишу в пямять по отдельности.
  11. GPIO + LuCi

    Никто не работал с LuCi больше?
  12. GPIO + LuCi

    http://luci.subsignal.org/trac/wiki/Docume...on/ModulesHowTo По этому примеру делал. Что-то запустилось(вкладка добавилась). Но я, видимо, совсем не понимаю принципы работы LuCi (что откуда берется? Ничего непонятно) , поэтому с управлением никак не могу разобраться.
  13. GPIO + LuCi

    Самый простой способ дернуть ногой из-под линукса таков: echo N > /sys/class/gpio/export echo out > /sys/class/gpio/gpioN/direction echo 1 > /sys/class/gpio/gpioN/value echo 0 > /sys/class/gpio/gpioN/value А как сделать то же самое через веб-интерфейс LuCi? Насколько я понял, для простейшего модуля ЛюСи нужно 2 файла: .../controller/ledblink.lua (код ниже) и .../model/cbi/ledblink.lua module("luci.controller.ledblink", package.seeall) function index() entry({"admin", "services", "ledblink"}, cbi("ledblink"), _("Led Blink"), 60).index = true end Что писать в .../model/cbi/ledblink.lua ? В сети есть пара примеров, но не один не заработал.
  14. Привет, Электроникс! Играюсь в данный момент с OpenWRT на кастомной плате. Изначально механизм такой: сливаем 100Мб исходников через SVN с openwrt.org, меняем DTS, делаем менюконфиг, собираем. В процессе сборки докачивается kernel, драйвера, пакеты и прочая лабутень. В итоге получаем 13Гб (700 тыс. файлов) разномастных объектов. Некоторые изменения необходимо производить после сборки, например, kernelmenuconfig и правку некоторых драйверов. Потом добавляются еще конфиги и т.д. Пытался использовать меркуриал, но там проблемы с hgignore. Затем был Гит, но все равно репозиторий получается огромным(несмотря на внушительный список в gitignore), коммитится все оооочень долго, время уходит, работа стоит. Вопрос: как организовать контроль версий в такой ситуации? Очень хотелось бы услышать тех, кто сталкивался с подобным.
×
×
  • Создать...