Jump to content

    

vgovseychuk

Участник
  • Content Count

    48
  • Joined

  • Last visited

Community Reputation

0 Обычный

About vgovseychuk

  • Rank
    Участник

Recent Profile Visitors

1298 profile views
  1. Цитата... не надо забывать как батареи на температуру реагируют. ... ... Ну, посчитал я, что нужна 10 Ah батарея. А у заказчика уже склад забит 65Ah дурами, и ему все равно что рядом с прибором ставить ... Ну это уже нюансы, которыми в данном вопросе можно пренебречь, тем более у хороших литиевых saft-ов саморазряд мизерный. =) А 5 минут не много ли? У меня еще давным давно(лет 5 назад) на SIM900 при средней сети в 30-40 секунд укладывалась передача и пакеты там больше были.
  2. Цитата(Ruslan1 @ Nov 17 2016, 09:32) Вы тип сети хоть скажите. 2G-3G-4G по-разному кушают. и пиковые токи бывают больше чем "1-2A" И порядок допустимых цен и другие уже имеющиеся в проекте ограничения. про время регистрации: лично видел до 1 минуты в некоторых сетях. Плюс регистрация там куда данные передаете (ftp или еще что)- время зависит от получателя данных. Про тип сети: 2G намного дешевле, и на практике для таких задач есть смысл использовать только 2G. Про цены: сложно сказать, но для примера максимальную планку выставляем из среднего арифметического от EB-870A, GL865-DUAL V3, Cinterion BGS2, умноженного на 2 =) Про пункт назначения: для примера по минимуму, простой tcp сокет. Цитаталично видел до 1 минуты в некоторых сетях и какой ток потребления при этом?
  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. Ограничение трафика через Ethernet Bridge

    Поставил 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 Мбит или полудуплекс не хочется оставлять.
  6. Sysupgrade / switch root to ram

    Цитата(alx2 @ Mar 18 2016, 09:36) Например u-boot может читать как с учетом, так и без учета бэдблоков. В вашем случае, очевидно, бэдблоки надо учитывать, поэтому вместо nand read следует использовать nand read.jffs2 (если у Вас u-boot). То же самое касается nand write. Посмотрел код U-Boot (cmd_nand.c). Просто nand read(write) тоже учитывает бэдблоки: (в районе 690 строки)Кодret = nand_read_skip_bad(nand, off, &rwsize,                              NULL, maxsize,                              (u_char *)addr); Цитата(vgovseychuk @ Mar 18 2016, 11:39) как они запишутся и как их считать правильно в оперативку из U-Boot? vol1 как nand с учетом bad, а vol2_ubi2 как UBI? Методом проверки на своем девайсе (как раз бэдблок в 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. Sysupgrade / switch root to ram

    Цитата(alx2 @ Mar 18 2016, 09:36) Не понял, о каком скрипте Вы говорите.Скрипт для обновления изначальных конфигов, например, или добавления новых файлов. В общем для тех файлов, которые не охвачены менеджером пакетов. Я понимаю, что по-хорошему все файлы должны генериться тем или иным пакетом, но я до этого пока не дошел и почти вручную меняю некоторые конфиги. Цитата(alx2 @ Mar 18 2016, 09:36) Вы, кстати, не сказали, каким бутлоадером пользуетесь ... В вашем случае, очевидно, бэдблоки надо учитывать, поэтому вместо nand read следует использовать nand read.jffs2 (если у Вас u-boot).Пользуюсь U-Boot 2014.10. Не знал, что есть функции nand read(write).jffs2. Думал, что nand write учитывает bad, а write.raw как раз пишет без них. Буду смотреть и пробовать. Цитата(alx2 @ Mar 18 2016, 09:36) Иначе, если в процессе записи будет пропуск бэдблока, запись "вылезет" за пределы раздела.Вот, это и подозревал, спасибо, исправлю Цитата(alx2 @ Mar 18 2016, 09:36) зачем Вы fdt и ядро переписываете дважды (через промежуточные разделы)Да, явно перемудрил И еще один вопрос про чтение/запись: Как пример, у меня есть разделы: и 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. Sysupgrade / switch root to ram

    Сделал полное обновление немного кривым способом, потеряв где-то 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. Sysupgrade / switch root to ram

    Вообще да, можно и так. Но это же каждый раз надо вписывать в скрипт, какие пакеты и файлы ты обновлял. Цитата(alx2 @ Mar 17 2016, 07:56) Может Вы и ответа не получаете именно потому, что выбранным Вами путем мало кто идет? Я посчитал такой вариант наиболее верным с оглядкой на то, как это сделано, например, в роутерах. В любом случае, большое спасибо за совет.
  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

    Цитата(Tarbal @ Feb 18 2016, 14:57) Вы скрипт можете запустить из ЛюСи? 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. Цитата(psL @ Feb 10 2016, 12:02) Видимо нужно добавлять в репозиторий только собственные изменения, а проект openwrt включать в виде субмодуля. Смотрите документацию по buildroot, вот еще статья есть небольшая http://www.kaizou.org/2013/11/buildroot-custom-packages/ Спасибо за наводку, выглядит интересно.
  15. Привет, Электроникс! Играюсь в данный момент с OpenWRT на кастомной плате. Изначально механизм такой: сливаем 100Мб исходников через SVN с openwrt.org, меняем DTS, делаем менюконфиг, собираем. В процессе сборки докачивается kernel, драйвера, пакеты и прочая лабутень. В итоге получаем 13Гб (700 тыс. файлов) разномастных объектов. Некоторые изменения необходимо производить после сборки, например, kernelmenuconfig и правку некоторых драйверов. Потом добавляются еще конфиги и т.д. Пытался использовать меркуриал, но там проблемы с hgignore. Затем был Гит, но все равно репозиторий получается огромным(несмотря на внушительный список в gitignore), коммитится все оооочень долго, время уходит, работа стоит. Вопрос: как организовать контроль версий в такой ситуации? Очень хотелось бы услышать тех, кто сталкивался с подобным.