Android - root-права и другие особенности

всё относительно мобильных гаджетов и приложений

Модераторы: Olej, adminn, vikos

Правила форума
Все сообщения не по теме форума будут, без каких либо уведомлений, удаляться, а их авторы - убираться из регистрации.
Язык сообщений - исключительно русский.
Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 04 сен 2012, 19:30

dmitriev писал(а):

Код: Выделить всё

$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
ничего не найдено!
У вас в планшете должно быть (с тач-скрина) включено: Настройки -> Приложения -> Разработка -> Отладка по USB

dmitriev
Писатель
Сообщения: 461
Зарегистрирован: 12 янв 2009, 19:36
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение dmitriev » 04 сен 2012, 19:37

Включено, не сомневайтесь. Я это успел уже почитать.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 05 сен 2012, 00:15

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.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 05 сен 2012, 02:35

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г.) и картины могут заметно отличаться.

tundra37
Писатель
Сообщения: 149
Зарегистрирован: 03 мар 2012, 19:26
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение tundra37 » 06 сен 2012, 09:42

Вкратце пробежался по теме, поэтому могу что-то повторно описать:
1) Под root подразумевают в настоящее время две вещи: собственно работу от имени рут - это просто через adb и есть во всех Андроидах и ,во-вторых, монтирование системной директории в режим записи - это в реальных железках обычно запрещенно, чтобы не разбираться с "кирпичами" от ламеров. Запрет сделан просто: системная директория - это сжатая файловая система без возможности записи (принципиально). Изначально оно использовалось, т.к. было мало места на флешке - теперь no write, no root!!!
2) Почему не удается запустить (подконнектится) к Андроиду не понял, но расскажу свой опыт. Я правда делал все с эмуляторами, но проблема была аналогичная - не найдено устройство, ну и ОС была Линукс. У adb там какая-то опция есть - ждать коннекта. Вот через нее чаще удается подцепится. Запускается скрипт с двумя коммандами - первая ждет, вторая цепляется или выполняет то, что нужно. Если не разберетесь, то посмотрю у себя дома. И маленькое замечание : Андроид долго "раскручивается" - уже что-то кажет на экране, а сервис adbd еще не запущен. Ну и вроде если USB-OTG есть - то можно adb по USB юзать. Это я не пробовал.
3) Немного про toolbox и busybox. В toolbox команды сильно урезаны по функционалу и даже синтаксис изменен.
4) Добавка к 1-му. Поэтому увы, если нужно что-то "добавить" нормально, то надо добавлять в прошивку : распаковывать, добавлять и назад паковать. Благо для популярных моделей можно найти тулбоксы, правда приходится с бубном плясать. С другой стороны разработчикам нужно куда-то записывать изменения - поэтому всегда есть директория с правами на запись - можно писать туда, но геморроя больше.
++++++++++
5) Вспомнил : про NAND интересовались. Тут ключевое слово mtd. Часть оттуда монтируется и можно почитать в Андроиде программно и можно вроде и всю память считать, но это уже высший пилотаж. Конкретные имена папок для моего плеера и эмуляторов напишу позднее. Раньше, до Андроида, было проще - все разделы из флешпамяти были доступны и даже на запись. Сейчас штатно есть только flasherase

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 06 сен 2012, 12:56

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 06 сен 2012, 13:04

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.

tundra37
Писатель
Сообщения: 149
Зарегистрирован: 03 мар 2012, 19:26
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение tundra37 » 06 сен 2012, 14:10

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 у Андроида очень мутный, сразу и не поймешь и против логики. Похоже механизмы сильно поменялись, в вот выдачу инфы не успели нормально сделать

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 06 сен 2012, 16:06

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 отрабатывает алиасы:

Код: Выделить всё

# bb ls XXX
XXX
# tb ls XXX
tb: not found
- причём, для tb (для самого себя) он, естественно, отработать алиас не может.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Android - root-права и другие особенности

Непрочитанное сообщение Olej » 06 сен 2012, 16:25

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

Ответить

Вернуться в «Android»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя