LINUX.ORG.RU
ФорумMobile

Сетевая файловая система


0

1
u0_a85@android:/data/botbrew/home # cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   tmpfs
nodev   debugfs
nodev   sockfs
nodev   usbfs
nodev   pipefs
nodev   anon_inodefs
nodev   devpts
        ext3
        ext2
        ext4
nodev   ramfs
        vfat
        msdos
        iso9660
        fuseblk
nodev   fuse
nodev   fusectl
        yaffs
        yaffs2
nodev   mtd_inodefs
nodev   functionfs
u0_a85@android:/data/botbrew/home # cat /proc/config.gz
/system/bin/sh: cat: /proc/config.gz: No such file or directory

Это была предистория. История начинается после попытки собрать модули для nfs руками. Пропущу потерянную ночь, когда таки удалось собрать драйвера nfs. Собрать - в том смысле, что modprobe перестал ругаться на версию модуля и на неопределённые системные вызовы. Т.е. удалось подобрать конфигурацию, которая с точки зрения modprpobe совместима с ядром. Результат - modprobe nfs уводит телефон во мгновенную перезагрузку.

Ставить кастомную прошивку желания нет. Во первых, заводская прошивка полностью устраивает и к ней претензий нет. Во вторых, уже поднял удобную консоль и настривать всё заново желания нет. Посему викторина - что делать?

Писать «маляву» во Free Software Foundation на производителя, что он зажимает исходники ядра? (Кстати, файл .config с исходниками попадает под лицензию?)

#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 3.4.5 Kernel Configuration
#

Кстати, весьма вероятно, что даже правильный config.gz может не решить проблему. Вполне может оказаться, что разаработчики конкретной модели телефона хитро запатчили ядро.

А ведь всего-то и нужно нескольлко модулей для мониторования nfs. Просить модули у производителей телефона не предлагать - уже пытался, но в ответ тишина.

★★★

Может быть уважаемые модераторы перенесут тему в Development?

Исходники ядра нашлись, но это ничуть не помогло.

Вот чего говорит cat /proc/last_kmsg (кстати, удобная штука)

[ 2011.455870] (0)[3248:insmod]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[ 2012.610269] (0)[3248:insmod][aee/ipanic] aee-ipanic: Panic dump sucessfully written to emmc (detail len: 13558, console len: 131072)
[ 2012.610289] (0)[3248:insmod][aee/ipanic] android log : 0x28e00, 0x40000, 0x0, 0x0, 0x68e00, 0x5000, 0x6de00, 0x2000
[ 2012.610309] (0)[3248:insmod][aee/ipanic] mmprofile: offset:0x6fe00, len:0x0
[ 2012.610327] (0)[3248:insmod]Rebooting in 1 seconds..machine_shutdown: start, Proess(insmod:3248)
[ 2013.622840] (0)[3248:insmod]Backtrace:
[ 2013.622862] (0)[3248:insmod][<c0011ecc>] (dump_backtrace+0x0/0x10c) from [<c05e0d34>] (dump_stack+0x18/0x1c)
[ 2013.622875] (0)[3248:insmod] r6:c083cca0 r5:00000000 r4:000003e8 r3:c083cd90
[ 2013.622906] (0)[3248:insmod][<c05e0d1c>] (dump_stack+0x0/0x1c) from [<c000f554>] (machine_shutdown+0x34/0x50)
[ 2013.622926] (0)[3248:insmod][<c000f520>] (machine_shutdown+0x0/0x50) from [<c000f5c4>] (machine_restart+0x14/0x60)
[ 2013.622946] (0)[3248:insmod][<c000f5b0>] (machine_restart+0x0/0x60) from [<c00676f0>] (emergency_restart+0x1c/0x20)
[ 2013.622959] (0)[3248:insmod] r5:00000001 r4:000003e8
[ 2013.622982] (0)[3248:insmod][<c00676d4>] (emergency_restart+0x0/0x20) from [<c05e163c>] (panic+0x12c/0x198)
[ 2013.623001] (0)[3248:insmod][<c05e1510>] (panic+0x0/0x198) from [<c00121b0>] (die+0x120/0x2a4)
[ 2013.623013] (0)[3248:insmod] r3:00000001 r2:dbcbdbd0 r1:20000193 r0:c06f4750
[ 2013.623037] (0)[3248:insmod] r7:00000001
[ 2013.623055] (0)[3248:insmod][<c0012090>] (die+0x0/0x2a4) from [<c05e0d94>] (__do_kernel_fault.part.10+0x5c/0x7c)
[ 2013.623076] (0)[3248:insmod][<c05e0d38>] (__do_kernel_fault.part.10+0x0/0x7c) from [<c00154ec>] (do_page_fault+0x26c/0x274)
[ 2013.623089] (0)[3248:insmod] r7:00000007 r3:dbcbddc0
[ 2013.623110] (0)[3248:insmod][<c0015280>] (do_page_fault+0x0/0x274) from [<c00083d8>] (do_DataAbort+0x7c/0x100)
[ 2013.623128] (0)[3248:insmod][<c000835c>] (do_DataAbort+0x0/0x100) from [<c000dfd8>] (__dabt_svc+0x38/0x60)
[ 2013.623141] (0)[3248:insmod]Exception stack(0xdbcbddc0 to 0xdbcbde08)
[ 2013.623157] (0)[3248:insmod]ddc0: c0b0e4c0 00000000 00000001 dead4ead c0b0e4c0 0000000c dd89f1f0 dd89f1c0
[ 2013.623174] (0)[3248:insmod]dde0: 00000001 bf1d5534 c0b0e4c0 dbcbde24 dbcbde08 dbcbde08 bf1e1098 bf1e10a4
[ 2013.623187] (0)[3248:insmod]de00: 20000013 ffffffff
[ 2013.623197] (0)[3248:insmod] r8:00000001 r7:dbcbddf4 r6:ffffffff r5:20000013 r4:bf1e10a4
[ 2013.623272] (0)[3248:insmod][<bf1e107c>] (sunrpc_init_net+0x0/0xbc [sunrpc]) from [<c04a683c>] (ops_init.constprop.10+0x90/0x104)
[ 2013.623287] (0)[3248:insmod] r6:dd89f1f0 r5:db058b80 r4:bf1d548c r3:bf1e107c
[ 2013.623318] (0)[3248:insmod][<c04a67ac>] (ops_init.constprop.10+0x0/0x104) from [<c04a6920>] (register_pernet_operations.isra.6+0x70/0xac)
[ 2013.623339] (0)[3248:insmod][<c04a68b0>] (register_pernet_operations.isra.6+0x0/0xac) from [<c04a69d4>] (register_pernet_subsys+0x24/0x3c)
[ 2013.623354] (0)[3248:insmod] r6:00000000 r5:bf1d548c r4:c086fc80 r3:c08c3b81
[ 2013.623417] (0)[3248:insmod][<c04a69b0>] (register_pernet_subsys+0x0/0x3c) from [<bf1e1168>] (init_sunrpc+0x30/0x6c [sunrpc])
[ 2013.623431] (0)[3248:insmod] r5:bf1d557c r4:00000000
[ 2013.623485] (0)[3248:insmod][<bf1e1138>] (init_sunrpc+0x0/0x6c [sunrpc]) from [<c0008708>] (do_one_initcall+0x11c/0x184)
[ 2013.623499] (0)[3248:insmod] r4:dbcbc000 r3:00000000
[ 2013.623520] (0)[3248:insmod][<c00085ec>] (do_one_initcall+0x0/0x184) from [<c00bd670>] (sys_init_module+0xc78/0x1984)
[ 2013.623539] (0)[3248:insmod][<c00bc9f8>] (sys_init_module+0x0/0x1984) from [<c000e500>] (ret_fast_syscall+0x0/0x30)
[ 2013.623552] (0)[3248:insmod]Send IPI to stop CPUs...
[ 2013.623562] (0)[3248:insmod]machine_shutdown: done
[ 2013.623570] (0)[3248:insmod]Reboot:machine restart...

Как видно из лога, падает где-то в функции sunrpc_init_net, но формат этого лога мне непонятен - где в этой информации адрес инструкции, которая вызвала исключение и где адрес памяти, обращение к которому вызвало исключение?

alman ★★★
() автор топика

"Что-от где-то развинтилось"

Ох, нелёгкая эта работа - собирать модули для телефона. После десятка безумных ночей удалось кое чего достичь:

modprobe sunrpc
modprobe auth_rpcgss
modprobe lockd
modprobe nfs_acl
modprobe nfs

И ничего не упало! Более того, если сделать cat /proc/filesystems, то можно увидеть, что добавилось следующее

nodev   rpc_pipefs
nodev   nfs

Казалось, удача уже близко. Остаётся самая малость - подмонтировать сетевой диск.

/system/xbin/busybox mount -o vers=2 -t nfs 192.168.xxx.xxx:/home/droid /data/botbrew/home

И... Телефон перезагрузился. При рассмотрении /proc/last_kmsg выясняется, что падает в kernel/net/sunrpc/clnt.c в функции rpc_regiter_client. Всё усложняется тем, что особо с опциями ядра и не поиграешься - если править .config руками, то андроидовские скрипты Kconfig c большой вероятностью перетирают исправленный файл конфигурации.

И что характерно, до сетевого обмена дело не доходит - если в команде mount указать любой, даже несуществующий ip-адрес, то всё равно телефон перезагружается.

alman ★★★
() автор топика

Без актуальных хедеров ядра это все бесполезно

vasily_pupkin ★★★★★
()
Ответ на: "Что-от где-то развинтилось" от alman

то андроидовские скрипты Kconfig c большой вероятностью перетирают исправленный файл конфигурации

На зависимости смотри.

У тебя структуры разные или из-за конфига, или из-за патчей, вот и ребутается.

vasily_pupkin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.