При первой загрузке прошивки устройство использует стандартный для openwrt IP-адрес 192.168.1.1
.
Удалённый доступ к устройству предоставляется по протоколу SSH.
Имя пользователя: root
Пароль: не требуется.
Файл конфигурации packet-forwarder находится в директории /etc, полный путь к файлу:
/etc/global_conf.json
Управление службой производится стандартным механизмом прошивки openwrt. Для запуска демона вручную необходимо выполнить на устройстве команду:
/etc/init.d/lora_pkt_fwd start
Для включения службы в автозагрузку (автоматический запуск при включении устройства) необходимо выполнить команду:
/etc/init.d/lora_pkt_fwd enable
При запуске службы в первый раз, после включения, скрипт /etc/init.d/lora_pkt_fwd
производит сброс устройства SX1301 используя GPIO. Конфигурация номеров выводов GPIO для сброса находится в файле
/etc/config/lora
По-умолчанию, файл содержит такую конфигурацию:
config sx1301 'SX1301_conf' option chipreset_pin '1' option pllreset_pin '11'
Для устройства GW-IMX6ULL при первой загрузке после перепрошивки опция pllreset_pin
удаляется, а опции chipreset_pin
назначается значение 130 (GPIO номер пина).
Для поддержки загрузки прошивки со SPI-NOR флеш-накопителя был сформирован пакет загрузчика специально для платформы i.mx6ull. Был сформирован патч от производителя для релиза u-boot 2017.07. Адрес репозитория:
Из этого репозитория и оригинального релиза 2017.07 был сформирован патч package/boot/uboot-imx6ull/patches/200-uboot_2017.07_i.mx6.patch
. Таким образом мы привели исходные тексты загрузчика к официально поставляемым производителем.
Далее, патч package/boot/uboot-imx6ull/patches/205-uboot-add_wirelessroad_gw_imx6ull.patch
добавляет конфигурационные и dts файлы для поддержки GW-IMX6ULL.
В патче package/boot/uboot-imx6ull/patches/300-uboot-add-spinor-boot.patch
отключается загрузка с NAND накопителя, а вместо неё происходит загрузка со SPI-NOR флеш-накопителя.
Пакеты для поддержки устройств Lora были портированы из репозитория:
Пакеты были переработаны для локальной сборки, обновление исходных текстов производится вручную, без привязки к внешним ресурсам. Патчи из репозитория применены к исходным текстам пакетов вручную. Для выбора пакетов LoraWan в menuconfig системы сборки openwrt создан раздел Lora Packages, а не стандартные пути Libraries, Network. Это сделано для удобства нахождения пакетов в конфигурационном меню.
Openwrt позволяет динамически изменять логическую структуру флеш-накопителей при загрузке системы. Это сделано для удобства работы основных подсистем, требовательных к размеру файлов, техническими ограничениями работы с NOR-флеш-накопителями (отсутствие wear-leveling и невозможностью работы как с обычным блочным устройством). Основной файловой системой в среде OpenWrt для ядра linux считается squashfs, вторичная файловая система, используемая OpenWRT - JFFS2. Первая не поддерживает режим записи (статическая) и формируется в момент сборки прошивки, имеет лучшие характеристики по параметрам сжатия дерева директорий и файлов. Вторая файловая система поддерживает запись и wear-leveling для уменьшения износа флеш-накопителей, но из-за этого обладает значительно худшими характеристиками сжатия.
Базовым набором разделов на флеш-накопителе считается раздел uboot для загрузчика и раздел firmware для основной системы.
Базовые разделы упомянуты в соответствующих dts-файлах для UBoot и ядра linux.
При каждой загрузке Openwrt происходит два логических разделения (split) разделов (partition). Первое разделение происходит по признаку имени раздела с прошивкой (в разделе firmware подразумевается наличие ядра linux упакованного в особый формат образов uImage, создаётся утилитой mkimage из состава UBoot, и наличие squashfs), в котором считывается размер ядра linux, в конце которого по границе erasesize (минимальный объём стирания) флеш-накопителя ищется признак (MAGIC комбинация байт) начала squashfs. Если файловая система найдена, в системе динамически создаются разделы kernel
и rootfs
. Раздел kernel точно соответствует границам ядра linux, а rootfs
занимает всю оставшуюся область.
Второе разделение происходит при появлении раздела rootfs
, в конце которого ядро ищет (по границе erasesize) указатель на начало JFFS2. Указатель помещается при сборке прошивки и выравнивается по размеру блока накопителя. После чего ядро создаёт ещё один раздел с названием rootfs_data
.
При дальнейшей загрузке системы происходит монтирование доступных разделов в необходимом порядке. За это отвечает исполняемый файл mount_root
. При самой первой загрузке устройства происходит создание JFFS2 файловой системы на разделе rootfs_data
.
Для привычной работы в среде openwrt с возможностью записи и удаления файлов используется подсистема ядра OverlayFS. Эта файловая система позволяет эмулировать поведение стандартных систем оперируя только одной файловой системой доступной для записи, все изменения в структуре сохраняются в ней.
Для удобства обновления и первичной записи на флеш также представлен раздел factory
, охватывающий весь объём SPI-NOR флеш-накопителя (8МиБ).
Наглядное представление разделов на SPI-NOR представлено ниже:
Доступно на всех этапах загрузки. Вписаны статически в DTS файлах UBoot и ядра linux |
factory (8192 KiB) (0x000000 - 0x800000) |
|||
u-boot (1024 KiB) (0x000000 - 0x100000) |
firmware (7168 KiB) (0x100000 - 0x800000) |
|||
Первый этап разделения при загрузке ядра |
kernel (динамический) |
rootfs (динамический) |
||
Второй и окончательный этап разделения при загрузке ядра. |
rootfs (динамический) |
rootfs_data (динамический) |