Встраивание программы sh в Makefile
Dec. 17th, 2013 05:33 amДля экономии места на flash, короткие программы bash можно встраивать в сам Maekfile.
Тогда для запуска этого пакетного файла необходимо набрать opkg install <имя этого пакета>.
Как это делается напишу по предыдущему примеру с переносом /overlay на usb диск.
Тогда для запуска этого пакетного файла необходимо набрать opkg install <имя этого пакета>.
Как это делается напишу по предыдущему примеру с переносом /overlay на usb диск.
#************************************************************************
#* Скрипт автоматизирующий перенос /overlay (изменяемой части прошивки) *
#* на USB диск. Запускается командой "opkg install 0-extoverlayrun" с *
#* установленным USB накопителем. *
#* 17 декабря 2013 года zepete.livejournal.com *
#************************************************************************
include $(TOPDIR)/rules.mk
# имя пакета, я добавил в начале "0-" для удобства навигации в каталоге
# /package
# !!!ВНИМАНИЕ!!! имя пакета должно совпадать с именем директории
# иначе будет возникать ошибка *** No rule to make target
PKG_NAME:=0-extoverlayrun
# версия пакета
PKG_VERSION:=1
# версия Makefile
PKG_RELEASE:=1
#на каких устройствах может запускаться
#PKGARCH:=all
include $(INCLUDE_DIR)/package.mk
#описание пакета для "make menuconfig"
#слово после '/' должно совпадать с PKG_NAME
define Package/0-extoverlayrun
#зарезервировано
SECTION:=1
#название меню, в котором будет находиться скрипт
CATEGORY:=my scripts
# какие пакеты необходимо установить дополнительно
# DEPENDS:=+
#краткое описание пакета, в конце необходимо добавить
# несколько пробелов для корректного отображения
# в make menuconfig
TITLE:=create extenal overlay.
#к кому обращаться за помощью
MAINTAINER:=zepete
#адресс пакета в интернете
URL:=zepete.livejournal.com
# опция make menuconfig по умолчанию
# n - не компилировать
# m - компилировать
# y - компилировать и внедрять
DEFAULT:=m
endef
#подробное описание пакета
define Package/0-extoverlayrun/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
"opkg install 0-extoverlayrun".
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-extoverlayrun/install
# $(INSTALL_DIR) $(1)/sbin
endef
#Программа bash без '#!/bin/sh', выполняемая до инсталяции пакета.
#запускается командой opkg install <имя пакета>
#в нее удобнее всего помещать настроечные пакетные файлы,
#которые нужны только один раз после перепрошивки,
# ибо при таком методе запуска их, они не прописываются в прошивку.
# !!!ВНИМАНИЕ!!! первым символом в строке должен быть '<tab>'
# пробел вызовет ошибку при компиляции: '*** missing separator'
#Для предотвращения установки должен возвращать false.
define Package/0-extoverlayrun/preinst
#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
)>>/dev/null
#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
tar -C /overlay -cvf - . | tar -C /tmp/ExtRoot -xf -
sync
umount /tmp/ExtRoot
rmdir /tmp/ExtRoot
reboot
exit 1
endef
#скрипт bash без '#!/bin/sh' выполняемый после установки пакета,
# !!!ВНИМАНИЕ!!! первым символом в строке должен быть '<tab>'
# пробел вызовет ошибку при компиляции: нет разделителя
define Package/0-extoverlayrun/postinst
endef
#скрипт bash без '#!/bin/sh' выполняемый перед удалением пакета,
# !!!ВНИМАНИЕ!!! первым символом в строке должен быть '<tab>'
# пробел вызовет ошибку при компиляции: нет разделителя
#Для предотвращения удаления должен возвращать false
define Package/0-extoverlayrun/prerm
endef
#скрипт bash без '#!/bin/sh' выполняемый перед удалением пакета,
# !!!ВНИМАНИЕ!!! первым символом в строке должен быть '<tab>'
# пробел вызовет ошибку при компиляции: нет разделителя
#Для предотвращения удаления должен возвращать false
define Package/0-extoverlayrun/postrm
endef
$(eval $(call BuildPackage,0-extoverlayrun))