Страница 2 из 3
Re: Android - root-права и другие особенности
Добавлено: 04 сен 2012, 19:30
Olej
dmitriev писал(а):
Код: Выделить всё
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
ничего не найдено!
У вас в планшете должно быть (с тач-скрина) включено: Настройки -> Приложения -> Разработка -> Отладка по USB
Re: Android - root-права и другие особенности
Добавлено: 04 сен 2012, 19:37
dmitriev
Включено, не сомневайтесь. Я это успел уже почитать.
Re: Android - root-права и другие особенности
Добавлено: 05 сен 2012, 00:15
Olej
Olej писал(а):
Большую путаницу создаёт то, что у вас есть (почти наверняка) 2 набора команд, являющихся аналогами GNU shell + утилит:
1. toolbox
2. busybox
Хотя идея:
- реализовать все команды shell как внутренние
для одной и той же программы интерпретатора команд (или
busybox, или toolbox)...
- а все остальные консольные команды просто как ссылки на эту программу интерпретатор...
- весьма остроумная идея (для малых систем! ... с ограниченным набором консольных команд).
Насколько я следил, это впервые было реализовано в активно развиваемом и по сейчас проекте
busybox ... а уже позже разработчиками Android-ов подхвачено в собственных поделках toolbox... кто во что горазд
.
Для программистов это должно быть особенно понятно ... Если написать такой макетный программный код (он настолько простой, что и не программисту должен быть в общих чертах понятен):
Код: Выделить всё
#include <stdio.h>
#include <string.h>
int main( int argc, char *argv[] ) {
char cmd[ 80 ], prg[ 80 ], *s;
int i;
strncpy( (char*)&prg, __FILE__, strchr( __FILE__, '.' ) - __FILE__ );
strcpy( (char*)&cmd, strrchr( argv[ 0 ], '/' ) + 1 );
if( strcmp( prg, cmd ) != 0 ) {
i = 1;
}
else {
strcpy( (char*)&cmd, argv[ 1 ] );
i = 2;
}
printf( "выполняется команда %s с параметрами: ", cmd );
for( ; i < argc; i++ )
printf( "%s ", argv[ i ] );
printf( "\n" );
return 0;
}
И подыгрывающий ему сценарий сборки Makefile:
Код: Выделить всё
SRC = mybox
SUBDIRS = cp mv ifconfig ip netcfg
all: $(SRC)
@rm -f $(SUBDIRS)
@make link
link:
@list='$(SUBDIRS)'; for subdir in $$list; do \
echo "=============== making link $$subdir ================="; \
(ln -s $(SRC) $$subdir) \
done
clean:
@rm -f $(SRC) $(SUBDIRS)
Собрав это чудо по make:
Код: Выделить всё
bash-4.2$ ls -l
итого 16
lrwxrwxrwx. 1 olej olej 5 сент. 5 00:11 cp -> mybox
lrwxrwxrwx. 1 olej olej 5 сент. 5 00:11 ifconfig -> mybox
lrwxrwxrwx. 1 olej olej 5 сент. 5 00:11 ip -> mybox
-rw-r--r--. 1 olej olej 289 сент. 4 23:34 Makefile
lrwxrwxrwx. 1 olej olej 5 сент. 5 00:11 mv -> mybox
-rwxrwxr-x. 1 olej olej 6466 сент. 5 00:11 mybox
-rw-r--r--. 1 olej olej 558 сент. 5 00:00 mybox.c
lrwxrwxrwx. 1 olej olej 5 сент. 5 00:11 netcfg -> mybox
... можете поразвлекаться
:
Код: Выделить всё
bash-4.2$ ./mybox ip 1 2 3 -5
выполняется команда ip с параметрами: 1 2 3 -5
bash-4.2$ ./mybox netcfg 1 2 3 -5
выполняется команда netcfg с параметрами: 1 2 3 -5
bash-4.2$ netcfg 1 2 3 -5
bash: netcfg: команда не найдена
bash-4.2$ ./netcfg 1 2 3 -5
выполняется команда netcfg с параметрами: 1 2 3 -5
bash-4.2$ ./mybox fdisk /dev/sdx
выполняется команда fdisk с параметрами: /dev/sdx
bash-4.2$ ./fdisk /dev/sdx
bash: ./fdisk: Нет такого файла или каталога
Это в точности повторяет логику *box-ов, которые работают в Android.
Re: Android - root-права и другие особенности
Добавлено: 05 сен 2012, 02:35
Olej
dmitriev писал(а):
Код: Выделить всё
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
ничего не найдено!
Вот как примонтировался планшет:
Код: Выделить всё
$ ls /run/media/ya/OYSTERST8A4
Alarms dk.pihl.portal launcher mount.txt Notifications Ringtones
Android documents LOST.DIR Movies Pictures
DCIM Download media Music Podcasts
В принципе, там есть где-то опции "передача данных по USB" (не вспомню где), причём их 2: в основную флеш-память устройства, и на SD-карту.
По-моему, они должны быть запрещены для отладки с adb, т.е. планшет не должен примонтироваться в FS Linux.
Вот как у меня выглядит при работе с adb:
Код: Выделить всё
bash-4.2$ tree /run/media/olej/
/run/media/olej/
`-- 33D6-5316
`-- SD.inf
1 directory, 1 file
P.S. хотя у меня на железке Android старый (конец 2010г.) и картины могут заметно отличаться.
Re: Android - root-права и другие особенности
Добавлено: 06 сен 2012, 09:42
tundra37
Вкратце пробежался по теме, поэтому могу что-то повторно описать:
1) Под root подразумевают в настоящее время две вещи: собственно работу от имени рут - это просто через adb и есть во всех Андроидах и ,во-вторых, монтирование системной директории в режим записи - это в реальных железках обычно запрещенно, чтобы не разбираться с "кирпичами" от ламеров. Запрет сделан просто: системная директория - это сжатая файловая система без возможности записи (принципиально). Изначально оно использовалось, т.к. было мало места на флешке - теперь no write, no root!!!
2) Почему не удается запустить (подконнектится) к Андроиду не понял, но расскажу свой опыт. Я правда делал все с эмуляторами, но проблема была аналогичная - не найдено устройство, ну и ОС была Линукс. У adb там какая-то опция есть - ждать коннекта. Вот через нее чаще удается подцепится. Запускается скрипт с двумя коммандами - первая ждет, вторая цепляется или выполняет то, что нужно. Если не разберетесь, то посмотрю у себя дома. И маленькое замечание : Андроид долго "раскручивается" - уже что-то кажет на экране, а сервис adbd еще не запущен. Ну и вроде если USB-OTG есть - то можно adb по USB юзать. Это я не пробовал.
3) Немного про toolbox и busybox. В toolbox команды сильно урезаны по функционалу и даже синтаксис изменен.
4) Добавка к 1-му. Поэтому увы, если нужно что-то "добавить" нормально, то надо добавлять в прошивку : распаковывать, добавлять и назад паковать. Благо для популярных моделей можно найти тулбоксы, правда приходится с бубном плясать. С другой стороны разработчикам нужно куда-то записывать изменения - поэтому всегда есть директория с правами на запись - можно писать туда, но геморроя больше.
++++++++++
5) Вспомнил : про NAND интересовались. Тут ключевое слово mtd. Часть оттуда монтируется и можно почитать в Андроиде программно и можно вроде и всю память считать, но это уже высший пилотаж. Конкретные имена папок для моего плеера и эмуляторов напишу позднее. Раньше, до Андроида, было проще - все разделы из флешпамяти были доступны и даже на запись. Сейчас штатно есть только flasherase
Re: Android - root-права и другие особенности
Добавлено: 06 сен 2012, 12:56
Olej
tundra37 писал(а):Вкратце пробежался по теме, поэтому могу что-то повторно описать:
А нельзя пробежаться детальнее?
Потому как тема сильно интересная...
tundra37 писал(а):
1) Под root подразумевают в настоящее время две вещи: собственно работу от имени рут - это просто через adb и есть во всех Андроидах и ,во-вторых, монтирование системной директории в режим записи - это в реальных железках обычно запрещенно, чтобы не разбираться с "кирпичами" от ламеров. Запрет сделан просто: системная директория - это сжатая файловая система без возможности записи (принципиально). Изначально оно использовалось, т.к. было мало места на флешке - теперь no write, no root!!!
По поводу возможности записи:
Код: Выделить всё
bash-4.2$ adb shell
# busybox u_n_a_m_e -a
Linux localhost 2.6.29 #153 Fri Oct 22 07:57:00 HKT 2010 armv6l unknown
Дальше всё на этой реальной железке.
Код: Выделить всё
# mount | grep /system
/dev/block/mtdblock2 /system yaffs2 ro 0 0
# echo 12345 > XXX
cannot create XXX: read-only file system
Всё как ожидалось: RO + тип файловой системы yaffs2 (насколько помню, она как основная используется и в RAM-based Linux, типа
Puppy Linux).
Но по поводу "сжатая файловая система
без возможности записи (принципиально)", по-моему, слухи сильно преувеличены:
Код: Выделить всё
# busybox mount -o remount,rw /system
# mount | grep /system
/dev/block/mtdblock2 /system yaffs2 rw 0 0
# echo 12345 > XXX
# cat XXX
12345
# pwd
/system
# ls -l X*
-rw-rw-rw- root root 6 2012-09-06 12:45 XXX
Обратите внимание на дату-время создания файла в /system.
P.S. ну и тем более, что их родной /data монтируется при загрузке RW:
Код: Выделить всё
# mount | grep /data
/dev/block/mtdblock5 /data yaffs2 rw,nosuid,nodev 0 0
Re: Android - root-права и другие особенности
Добавлено: 06 сен 2012, 13:04
Olej
tundra37 писал(а):
++++++++++
5) Вспомнил : про NAND интересовались. Тут ключевое слово mtd. Часть оттуда монтируется и можно почитать в Андроиде программно и можно вроде и всю память считать, но это уже высший пилотаж. Конкретные имена папок для моего плеера и эмуляторов напишу позднее. Раньше, до Андроида, было проще - все разделы из флешпамяти были доступны и даже на запись. Сейчас штатно есть только flasherase
Код: Выделить всё
# mount | grep nand
/dev/block/ndda1 /nand vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
# busybox fdisk -l /dev/block/ndda
Disk /dev/block/ndda: 2923 MB, 2923429888 bytes
1 heads, 64 sectors/track, 89216 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/block/ndda1 1 89216 2854896 b Win95 FAT32
Partition 1 does not end on cylinder boundary
Что значит "Тут ключевое слово mtd"? Вот это? :
Код: Выделить всё
# mount | grep mtd
/dev/block/mtdblock2 /system yaffs2 rw 0 0
/dev/block/mtdblock5 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev 0 0
Но это а). флеш память (внутренняя) планшета, но б). это не NAND.
Re: Android - root-права и другие особенности
Добавлено: 06 сен 2012, 14:10
tundra37
1) Так вот возможность записи от типа фс(файл.сист.) зависит. Yaffs позволяет записывать, но плохо пакует и ... это неприемлимо для крутых фирм, которые боятся дешевых клонов.
На других стоит/стояло squashfs. Где-то я видел "удивительный" ext4 - он sparse(без пустых мест) и то ли из-за этого, то ли из-за загрузки в память - содержит заголовок впереди себя. Чтобы его посмотреть приходится конвертировать в нормальный ext4. Т.к. оно весит 2 Гб, то не слишком удобно разбираться. Кстати, Андроид86 c LiveCD монтирует system с CD/USB как squashfs, а при установке распаковывает ее - вот поэтому такая разница в возможности записи.
2) Про NAND : вы наверное имеет ввиду nonviolated memory. Она маленькая и NAND там не причем. В телефонах флеш-память давно уже NAND и в Андроиде по-моему тоже. Вообще-то она обязана быть NAND, чтобы при записи по одному и тому же адресу - писалось в другой. Или я не прав?
++++++++++++++++++++++++++++++++++++++++++++++
Посмотрел "многострадальный" Iconbit - внутренняя память и есть NAND, т.ч. mtd - это оно и есть.
А ОЗУ - это tmpfs. Правда mount у Андроида очень мутный, сразу и не поймешь и против логики. Похоже механизмы сильно поменялись, в вот выдачу инфы не успели нормально сделать
Re: Android - root-права и другие особенности
Добавлено: 06 сен 2012, 16:06
Olej
tundra37 писал(а):3) Немного про toolbox и busybox. В toolbox команды сильно урезаны по функционалу и даже синтаксис изменен.
1. Конечно отличаются ... начиная с размера (а значит и широты возможностей):
Код: Выделить всё
# ls -l /system/bin/*box
-rwxr-xr-x root shell 1745016 2010-09-20 05:43 busybox
-rwxr-xr-x root shell 73228 2010-10-12 13:32 toolbox
Разница больше чем в 2 раза.
2. Синтаксис и у команд в
busybox сильно изменён ... в сравнении с вариантом GNU-утилит (например):
Код: Выделить всё
# busybox mount --help
BusyBox v1.8.1 (2007-11-14 10:11:37 EST) multi-call binary
Usage: mount [flags] DEVICE NODE [-o options,more-options]
Mount a filesystem. Filesystem autodetection requires /proc be mounted.
Options:
-a Mount all filesystems in fstab
-r Read-only mount
-t fs-type Filesystem type
-w Read-write mount (default)
-o option:
loop Ignored (loop devices are autodetected)
[a]sync Writes are asynchronous / synchronous
[no]atime Disable / enable updates to inode access times
[no]diratime Disable / enable atime updates to directories
[no]dev Allow use of special device files / disallow them
[no]exec Allow use of executable files / disallow them
[no]suid Allow set-user-id-root programs / disallow them
[r]shared Convert [recursively] to a shared subtree
[r]slave Convert [recursively] to a slave subtree
[r]private Convert [recursively] to a private subtree
[un]bindable Make mount point [un]able to be bind mounted
bind Bind a directory to an additional location
move Relocate an existing mount point
remount Remount a mounted filesystem, changing its flags
ro/rw Mount for read-only / read-write
There are EVEN MORE flags that are specific to each filesystem
You'll have to see the written documentation for those filesystems
Это, конечно же, вовсе не GNU mount:
Код: Выделить всё
bash-4.2$ mount --help
Usage:
mount [-lhV]
mount -a [options]
mount [options] <source> | <directory>
mount [options] <source> <directory>
mount <operation> <mountpoint> [<target>]
...
3. Многие команды в
busybox и toolbox - дублируются (mount, ls, и др.), синтаксис (и возможности) дубликатов отличаются, но, что самое неприятное, команды из toolbox не имеют ни какой минимальной подсказки:
Код: Выделить всё
# toolbox mount --help
unknown option -- -mount: invalid option --
(см. выше вывод help для
busybox mount --help).
Т.е. toolbox - а). это то, что конкретный производитель нагородил в качестве mini-shell как ему вздумалось + б). то, что не имеет никакого описания от этого производителя ("тайна великая есть"(с)
).
И форматы вывода команд различаются:
Код: Выделить всё
# busybox ls -l /sbin
-rwxr-x--- 1 0 0 134176 Jan 1 1970 adbd
# toolbox ls -l /sbin
-rwxr-x--- root root 134176 1970-01-01 03:00 adbd
4. Любопытно, что toolbox имеет ещё какие-то внутренние команды (?) которые не отображены ссылками в /system/bin:
Код: Выделить всё
# alias bb=busybox
# alias tb=toolbox
# alias
alias tb='toolbox '
alias bb='busybox '
Код: Выделить всё
# ls /system/bin/al*
/system/bin/alsa_amixer
/system/bin/alsa_aplay
/system/bin/alsa_ctl
- такой ссылки на toolbox нет, но тем не менее toolbox отрабатывает алиасы:
- причём, для tb (для самого себя) он, естественно, отработать алиас не может.
Re: Android - root-права и другие особенности
Добавлено: 06 сен 2012, 16:25
Olej
tundra37 писал(а):
2) Про NAND : вы наверное имеет ввиду nonviolated memory. Она маленькая и NAND там не причем. В телефонах флеш-память давно уже NAND и в Андроиде по-моему тоже. Вообще-то она обязана быть NAND, чтобы при записи по одному и тому же адресу - писалось в другой. Или я не прав?
Я имею в виду вот что:
- NAND - это термин, насколько я понимаю (не сильно
) технологический, конструктивный -
Флеш-память:
Технология NOR позволяет получить быстрый доступ индивидуально к каждой ячейке, однако площадь ячейки велика. Наоборот, NAND имеют малую площадь ячейки, но относительно длительный доступ сразу к большой группе ячеек. Соответственно различается область применения: NOR используется как непосредственная память программ микропроцессоров и для хранения небольших вспомогательных данных.
- как я слышал от коллег разработчиков, флеш-память NAND не годится (или не сильно годится) для выполняемого кода, а подходит для хранения данных...
- (но всё со временем сильно меняется, и теми же терминами начинают называть совсем другие вещи)
- это с реальной железки:
Код: Выделить всё
# busybox df
Filesystem 1k-blocks Used Available Use% Mounted on
tmpfs 68664 12 68652 0% /dev
tmpfs 4096 0 4096 0% /sqlite_stmt_journals
tmpfs 1024 0 1024 0% /broadcasting
/dev/block/mtdblock2 153600 115664 37936 75% /system
/dev/block/mtdblock5 297984 77164 220820 26% /data
/dev/block/mtdblock4 40960 10796 30164 26% /cache
/dev/block/ndda1 2852992 37712 2815280 1% /nand
- как я предполагаю, mtdblock & ndda - это разные чипы флеш-памяти (с разными, или с одинаковыми характеристиками...):
Код: Выделить всё
# ls -l /dev/block/mtdblock*
brw------- root root 31, 0 2009-09-02 05:30 mtdblock0
brw------- root root 31, 1 2009-09-02 05:30 mtdblock1
brw------- root root 31, 2 2009-09-02 05:30 mtdblock2
brw------- root root 31, 3 2009-09-02 05:30 mtdblock3
brw------- root root 31, 4 2009-09-02 05:30 mtdblock4
brw------- root root 31, 5 2009-09-02 05:30 mtdblock5
brw------- root root 31, 6 2009-09-02 05:30 mtdblock6
brw------- root root 31, 7 2009-09-02 05:30 mtdblock7
brw------- root root 31, 8 2009-09-02 05:30 mtdblock8
Код: Выделить всё
# ls -l /dev/block/ndd*
brw-rw-rw- root root 240, 0 2009-09-02 05:30 ndda
brw------- root root 240, 1 2009-09-02 05:30 ndda1
У них major номер устройства другой (240 против 31), т.е. они обслуживаются
разными модулями ядра Linux.
Ну и:
Код: Выделить всё
# busybox fdisk -l /dev/block/ndda
Disk /dev/block/ndda: 2923 MB, 2923429888 bytes
1 heads, 64 sectors/track, 89216 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/block/ndda1 1 89216 2854896 b Win95 FAT32
Partition 1 does not end on cylinder boundary
В
техническом описании этой железки (чуть более предыдущей модели) написано такое:
MIDX5A Hardware Configurations
CPU:
TELECHIPS8902
ARM1176JZ(F)-S up to 800MHz
SUPPORT 3D GAME/MAP/DYNAMIC PIC.
MEMORY:
256M DDR2
BUILT-IN 4GB/8GB/16GB/32GB
NAND FLASH:
SUPPORT SD/SDHC CARD,MAX UP TO 32GB