Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 24 апр 2018, 09:55

Часовой пояс: UTC + 3 часа


Правила форума


Все сообщения не по теме форума будут, без каких либо уведомлений, удаляться, а их авторы - убираться из регистрации.
Язык сообщений - исключительно русский.



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
Непрочитанное сообщениеДобавлено: 04 сен 2012, 19:30 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
dmitriev писал(а):
Код:
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached

ничего не найдено!


У вас в планшете должно быть (с тач-скрина) включено: Настройки -> Приложения -> Разработка -> Отладка по USB


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 04 сен 2012, 19:37 
Не в сети
Писатель

Зарегистрирован: 12 янв 2009, 19:36
Сообщения: 461
Включено, не сомневайтесь. Я это успел уже почитать.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 05 сен 2012, 00:15 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
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.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 05 сен 2012, 02:35 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
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г.) и картины могут заметно отличаться.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 06 сен 2012, 09:42 
Не в сети
Писатель

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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 06 сен 2012, 12:56 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 06 сен 2012, 13:04 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
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.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 06 сен 2012, 14:10 
Не в сети
Писатель

Зарегистрирован: 03 мар 2012, 19:26
Сообщения: 149
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 у Андроида очень мутный, сразу и не поймешь и против логики. Похоже механизмы сильно поменялись, в вот выдачу инфы не успели нормально сделать


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 06 сен 2012, 16:06 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
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 (для самого себя) он, естественно, отработать алиас не может.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 06 сен 2012, 16:25 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10679
Откуда: Харьков
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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.925s | 19 Queries | GZIP : On ]