zepete: (Default)
[personal profile] zepete
В прошлый раз описал настройку usb диска ввиде последовательности команд, которую очень легко превратить в программу для bash/busybox/sh/ash.

Текст получившегося скрипта.


#!/bin/sh
#************************************************
#* скрипт для расширения ROM на USB drive       *
#* для возможности установки дополнительного ПО *
#* Автор zepete.livejournal.com                 *
#************************************************

#check for usb drive
if ! [ -b /dev/sda ]; then
 echo Have not flash drive '(/dev/sda)'
 exit 1
fi

#delete partition
# parameters
#  d - delete partition
#  Partition number
fdisk /dev/sda <<EOF
d
1
d
2
d
3
d
4
w
EOF
#create partitions
# parametrs
#  n - create partition
#  p - primiry partition, e - extended
#  Partition number (1-4)
#  First cylinder, by default first free
#  Last cylinder or +size or +sizeM or +sizeK
fdisk /dev/sda <<EOF # create swap partition
n
p
1

+256K
w
EOF
fdisk /dev/sda <<EOF #create data partition
n
p
2


w
EOF
#set type of swap partition
# parametrs
#  t - set type of partition
#  partition number
#  Hex code type of partition
fdisk /dev/sda <<EOF
t
1
82
w
EOF

#formating partition
mkswap /dev/sda1
mkfs.ext2 /dev/sda2

#setup /etc/config/fstab
/etc/init.d/fstab stop
uci set fstab.automount.anon_mount=0
uci delete fstab.@mount[0].device
uci set fstab.@mount[0].uuid=$(blkid -s UUID /dev/sda2 | cut -d\" -f2)
uci set fstab.@mount[0].fstype='ext2'
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].target='/overlay'
uci delete fstab.@swap[0].device
uci set fstab.@swap[0].uuid=$(blkid -s UUID /dev/sda1 | cut -d\" -f2)
uci set fstab.@swap[0].enabled=1
uci commit fstab


#copy /overlay to flash
mkdir /tmp/ExtRoot
mount -t ext2 /dev/sda2 /tmp/ExtRoot
sync
tar -C /overlay -cvf - . | tar -C /tmp/ExtRoot -xf -
sync
umount /tmp/ExtRoot
rmdir /tmp/ExtRoot
reboot



Добавить его в прошивку можно 4 способами:
1. Добавить в каталог ...../package/base-files/files/<путь к файлу в прошивке> или ...../package/base-files/files/<название платформы, например mr3020>/<путь к файлу в прошивке>.
2. Создать каталог ....../files/<путь к файлу в прошивке>, и в него поместить свой файл.
3. Создать каталог с файловой системой добавляемой прошивку и запустить сборку командой make image Files=<путь к папке>/
4. Создать свой пакет с этим файлом.
Первые три способа затруднений не вызывают, но они не позволяют управлять включением файла в прошивку из make menuconfig. Поэтому я предпочитаю способ с помощью создания своего пакета.

Далее на примере скрипта для расширения корневого каталога и создания раздела подкачки на USB диске, я опишу как это сделать.

1. Для этого необходимо создать папку в каталоге ...../packages. Я создал папку 0-prepareflsh. Приставку "0-" добавил для простаты навигации к этой папке из файловых менеджеров.
2. Создал в ней каталог files.
3. Поместил в него свой файл со скриптом. Я его назвал prepareflash.sh.
4. В каталоге ...../feeds/packages создал текстовый файл Makefiles со следующим текстом.
Только из него надо удалить все комментарии, ибо русские буквы система сборки не понимает и выдает ошибку отсутствия разделителя.


#************************************************************************
#* Скрипт автоматизирующий перенос /overlay (изменяемой части прошивки) *
#* на USB диск. Запускается командой "prepareflash.sh" с установленным  *
#* USB накопителем.                                                     *
#* 17 декабря 2013 года zepete.livejournal.com                          *
#************************************************************************


include $(TOPDIR)/rules.mk

# имя пакета, я добавил в начале "0-" для удобства навигации в катологе
# /package
# !!!ВНИМАНИЕ!!! имя пакета должно совпадать с именем директории,
# иначе будет возникать ошибка *** No rule to make target
PKG_NAME:=0-prepareflash
# версия пакета
PKG_VERSION:=1
# версия Makefile
PKG_RELEASE:=1
#на каких устройствах может запускаться
#PKGARCH:=all

include $(INCLUDE_DIR)/package.mk

#описание пакета для "make menuconfig"
#слово после '/' должно совпадать с PKG_NAME
define Package/0-prepareflash
#зарезервировано
 SECTION:=1
#название меню, в котором будет находиться скрипт
 CATEGORY:=my scripts
# какие пакеты необходимо установить дополнительно
#  DEPENDS:=+
#краткое описание пакета, в конце необходимо добавить
# несколько пробелов для корректного отображения
# в make menuconfig
 TITLE:=create extenal overlay
#к кому обращаться за помощью
 MAINTAINER:=zepete
#адресс пакета в интернете
 URL:=zepete.livejournal.com
# опция make menuconfig по умолчанию
# n - не компилировать
# m - компилировать
# y - компилировать и внедрять
 DEFAULT:=y
endef

#подробное описание пакета
define Package/0-prepareflash/description
0-prepareflash delete all partition on /dev/sda,
make there swap partition size more 256K
and partition type ext2 on witch place /overlay.
For run need execute command line "prepareflash".
endef

#обязательный раздел
#без него будет возникать ошибка
# 'No targets specified and no makefile found'
#нужен для компиляции пакета из исходных кодов
define Build/Compile
endef

#обязательный и бесполезный раздел
# него будет возникать ошибка
# 'No targets specified and no makefile found'
define Build/Configure
endef


#скрипт bash без '#!/bin/sh' описывающий установку пакета,
# то есть какие файлы надо копировать
# !!!ВНИМАНИЕ!!! первым символом в строке должен быть '<tab>'
# пробел вызовет ошибку при компиляции: '*** missing separator'
define Package/0-prepareflash/install
#создание директории.
#Создавать директорию обязательно, иначе не смогут скопироваться файлы
# '$(INSTALLDIR)' - это псевдоним "install -d -m0755" (читать, писать и
# выполнять может хозяин, а все остальные только читать и писать
 $(INSTALL_DIR) $(1)/sbin
# копирование файла
# копирование файлов по одному с заданными атрибутами
# '$(INSTALL_BIN)' - псевдоним для "install -m0755" (читать, писать и
# выполнять может хозяин, а все остальные только читать и писать)
# '$(INSTALL_DATA)' - псевдоним для "install -m0644" (хозяин может читать и
# изменять, а все остальные только читать
# '$(INSTALL_CONF)' - псевдоним для "install -m0600" (хозяин может читать и
#изменять, а все остальные не имеют прав.
 $(INSTALL_BIN) ./files/prepareflash.sh $(1)/sbin/prepareflash.sh
#альтернативный способ копирования файлов группой сразу
#  cp ./files/* $(1)/sbin
# chmod 755 *
endef

$(eval $(call BuildPackage,0-prepareflash))

:)

Date: 2014-01-07 03:12 am (UTC)
From: [identity profile] cilkus.livejournal.com
Ничего себе, тот кто писал голимо написал.

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 05:32 am
Powered by Dreamwidth Studios