Монтирование сетевого диска в андроид
Купил недавно себе планшет Samsung Galaxy Tab Pro 10.1 LTE SM-T525 и захотелось дома смотреть на нём фильмы и другие файлы с моего сетевого диска, расшаренного через samba. Для этого в ядре должна быть поддержка CIFS и не только… в андроиде начиная с версии 4.2 это оказалось нетривиальной задачей.
1. Суть проблемы с пользовательскими монтированиями
Дело в том, что с версии 4.2 в Adnroid ввели многопользовательский режим и вместе с ним все файловые системы теперь монтируются как Slave, это приводит к тому, что файловая система смонтированная одним пользователем, не видна другим пользователям.
В виртуальной машине Dalvik андроида с версии 4.2 в файле vm/Init.cpp есть такой код:
Этот код монтирует рутовую файловую систему с флагами MS_SLAVE и MS_REC, это означает что файловые системы, смонтированные внутри / будут также монтироваться по умолчанию с флагом MS_SLAVE и доступны только пользователям их смонтировавшим и их дочерним процессам. Для решения этой проблемы, пользователем mkasick с xda-developers был предложен следующий патч для ядра в функции do_mount:
Суть патча в том, что мы перехватываем вызов do_mount для / с флагами MS_SVALE и MS_REC и не даём их установить. Но для работы андроида эти флаги необходимы для пользовательских файловых систем в /storage, иначе система у меня просто не грузится. Поэтому мы вызываем do_mount(NULL, (char *)storage, NULL, (MS_SLAVE | MS_REC), NULL)) == 0). Чтобы последний вызов работал, /storage должна быть точкой монтирования, а не просто директорией, поэтому в файле init.rc в рамдиске, где происходит создание директории /storage необходимо туда смонтировать tmpfs
После этих манипуляций, точки монтирования за пределами /storage будут видны всем пользователям.
2. Сборка ядра
Теперь применяем патч для исправления проблемы с пустыми точками монтирования
Далее необходимо прописать переменные окружения и подготовить конфигурационный файл ядра, для моего самсунга это делается так:
Данная команда создаст файл .config, далее необходимо выполнить команду make menuconfig и перейти в раздел File Systems -> Network File Systems и отметить пункт CIFS support (в случае сборки модуля, необходимо отметить буквой M) и отмечаем RESTRICT_ROOTFS_SLAVE в разделе File Systems
Далее выходим клавишей Esc и сохраняем конфигурацию. Теперь собираем ядро командой make -j3 (вместо цифры 3 указываем количество ядер процессора+1)
На этом сборка ядра окончена.
3. Сборка boot.img для прошивки
Теперь необходимо прошить новое ядро в планшет. Для этого необходимо собрать образ boot.img в который входит ядро, ramdisk и device tree для чипов Qualcomm.
Для начала нам надо получить родной ramdisk, для этого распаковываем оригинальную прошивку (это обычный tar) и достаём оттуда файл boot.img
Для распаковки boot.img понадобится пакет bootimg_tools
Скачиваем его в ~/android, и распаковываем командой split_boot файл boot.img
Далее ищем строку setprop selinux.reload_policy 1 и меняем её на setprop selinux.reload_policy 0
Для монтирования /storage как tmpfs ищем строчку mkdir /storage 0751 root sdcard_r и после неё добавляем
Также в файле defaul.prop меняем ro.secure=1 на ro.secure=0 и ro.adb.secure=1 на ro.adb.secure=0
Теперь собираем ramdisk назад
Далее для сборки нам ещё необходим файл dt.img, он генерируется утилитой dtbTool которая идёт в комплекте с ядром
Теперь, когда есть всё необходимое для сборки boot.img, начинаем саму сборку при помощи утилиты mkbootimg (поставляется так же с ядром)
Всё, файл boot.img готов. Для прошивки его через Odin, делаем из него boot.tar.md5
Теперь прошиваем его через Odin
На Samsung есть проблема, что с катомным ядром перестаёт работать wifi, лечится это правкой файла build.prop на рабочей системе. Необходимо заменить строчку ro.securestorage.support=true на ro.securestorage.support=false
4. Настройка ПО для монтирования
Для монтирования шар будем использовать программу CifsManager
Тут есть несколько нюансов в настройке:
а) В cifs на ядре 3.4 что-то поломали, и теперь он не обрабатывает параметр device команды mount, т.е. конструкция вида
mount -t cifs //pc/share /mnt больше не работает, монтируемую шару необходимо указывать в параметре unc, т.е. предыдущая команда будет выглядеть так:
б) Теперь про точку монтирования. Как писалось выше, если мы будем монтировать внутри /storage, то такая шара будет пустая для других приложений, если же монтировать куда-то вне /storage, то большинство приложений её не смогут открыть, т.к. позволяют открывать файлы только внутри карты памяти. Выход есть. Внутренняя память /storage/emulated/0 на самом деле лежит в /data/media/0, а /storage/emulated/0 — это эмуляция fat32 для этой директории. Так что мы смело можем можем монтировать например в /data/media/0/cifs и увидим нашу шару в фйловом менеджере в internal storage.
в) Есть ещё нигде не описанный нюанс, команда mount -t cifs почему то игнорирует параметры, идущие после password, например в команде
параметр sec=ntlmssp не будет обработан. Поэтому, если для подключения к шаре необходим пароль, то в CifsManager поле Password оставляем пустым, а пароль пишем в поле Options в самый конец, как на скриншоте выше.
г) Для корректной работы с русскими буквами в именах файлов, необходимо добавить опцию iocharset=utf8
В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.
Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER , PASS , SERV , SERVNAME и SHARE в строках 44-48, и добавить новый блок в case . Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).
В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.
CifsManager
Описание есть на форуме 4PDA, поэтому подробно останавливаться на этом приложении я не буду.
Стоит только отметить правильный порядок модулей в опции Path to cifs.ko (видно на скриншоте).
А так же при создании шары не забудьте в опциях вбить iocharset=utf8,file_mode=0777,dir_mode=0 777
Прямо из приложения можно открыть установленным файловым менеджером подключенный ресурс, что плюс.
А минус — нет бэкапа опций на SD, потому что их достаточно много. Так что при, например, перепрошивке, всё нужно будет вбивать заново (если не пользоваться прогами для бэкапа).
Но главное — оно работает, и позволяет монтировать в 2 тапа пальцем по экрану: запуск приложения + тап по нужной шаре.
GScript
Это приложение предназначено не именно для монтирования, а для запуска вообще любых скриптов. Также поддерживает создание ярлыков, что и позволяет монтировать шары в один тап.
Имеются функции и сохранения/загрузки скриптов с SD-карты.
Полезные скрипты можно найти в теме на XDA.
Ну а теперь к монтированию.
Можно было бы, конечно, просто вбить все команды из предыдущего поста: insmod, mount и unount. Но это всё равно долго и нудно (особенно если подключаемых ресурсов несколько), поэтому я для себя решил наговнокодить скрипт, чтобы все нужные команды были в одном обычном sh-файле, который можно будет запускать не только из GScript, но и при необходимости из терминала.
cifs.sh:
старый вариант скрипта, новый смотрите ниже
export PATH=/data/data/berserker.android.apps.s shdroid/home/bin:$PATH
"m")
if mount | grep -Fq 'unc=\192.168.1.1\share,username=USER'
then
echo "UnMounting //server/share . "
umount -f -l /mnt/sdcard/cifs/share
echo "//server/share unmounted for USER!"
echo
echo
echo
echo
echo
echo
else
echo "Mounting //server/share . "
mount -t cifs -o ro,iocharset=utf8,username=USER,password=P ASS,file_mode=0777,dir_mode=0777 //192.168.1.1/share /mnt/sdcard/cifs/share && \
echo "//server/share mounted for USER!"
echo
echo
echo
echo
echo
echo
fi
;;
"r")
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
*)
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
На первом скриншоте видно, что перед скриптом стоит команда sh, что позволяет запускать его с SD-карты в FAT32, где невозможно сделать chmod +x.
Зачем при этом у меня такой длинный путь к файлу, я напишу как-нибудь потом.
Теперь пара слов о самом скрипте.
Результат работы показан на втором скриншоте, после того как скрипт отработал окно автоматически закрывается.
Несколько пустых echo добавлено чтобы появляющийся поп-ап не закрывал вывод.
При запуске без параметров происходит загрузка всех модулей, l — список модулей, r — выгрузка, m — список смонтированных шар (только в cifs.sh v2.0). m c — монтирование/размонтирование; если шара смонтирована, происходит размонтирование, и наоборт.
ВАЖНО:
Скрипт использует grep, поэтому должен быть установлен BusyBox.
Исправьте переменную PATH , указав правильный путь до grep!
Также (хотя это и не будет влиять на запуск из-под GScript), исправьте/проверьте путь до интерпретатора sh в 1 строке.
Добавляя другие аргументы в case (например, m1, m2 и т.д) можно подключать несколько шар, или одну под разными юзерами. Естественно всё ограничивается лишь вашей фантазией.
Это решение мне показалось лучше в первую очередь тем, что скрипт можно легко редактировать, просто открыв в текстовом редакторе при подключении смартфона как USB-диска, или через SSH.
Как-нибудь позже я напишу об организации в Android одной среды как при запуске терминала, так и при подключении по SSH.
А пока что — с наступающим, юзернеймы! Ведь до 2012-го осталось меньше суток
Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER , PASS , SERV , SERVNAME и SHARE в строках 44-48, и добавить новый блок в case . Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).
Originally published at Shumaher’s_Blog. You can comment here or there.
В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.
Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER , PASS , SERV , SERVNAME и SHARE в строках 44-48, и добавить новый блок в case . Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).
В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.
CifsManager
Описание есть на форуме 4PDA, поэтому подробно останавливаться на этом приложении я не буду.
Стоит только отметить правильный порядок модулей в опции Path to cifs.ko (видно на скриншоте).
А так же при создании шары не забудьте в опциях вбить iocharset=utf8,file_mode=0777,dir_mode=0 777
Прямо из приложения можно открыть установленным файловым менеджером подключенный ресурс, что плюс.
А минус — нет бэкапа опций на SD, потому что их достаточно много. Так что при, например, перепрошивке, всё нужно будет вбивать заново (если не пользоваться прогами для бэкапа).
Но главное — оно работает, и позволяет монтировать в 2 тапа пальцем по экрану: запуск приложения + тап по нужной шаре.
GScript
Это приложение предназначено не именно для монтирования, а для запуска вообще любых скриптов. Также поддерживает создание ярлыков, что и позволяет монтировать шары в один тап.
Имеются функции и сохранения/загрузки скриптов с SD-карты.
Полезные скрипты можно найти в теме на XDA.
Ну а теперь к монтированию.
Можно было бы, конечно, просто вбить все команды из предыдущего поста: insmod, mount и unount. Но это всё равно долго и нудно (особенно если подключаемых ресурсов несколько), поэтому я для себя решил наговнокодить скрипт, чтобы все нужные команды были в одном обычном sh-файле, который можно будет запускать не только из GScript, но и при необходимости из терминала.
cifs.sh:
старый вариант скрипта, новый смотрите ниже
export PATH=/data/data/berserker.android.apps.s shdroid/home/bin:$PATH
"m")
if mount | grep -Fq 'unc=\192.168.1.1\share,username=USER'
then
echo "UnMounting //server/share . "
umount -f -l /mnt/sdcard/cifs/share
echo "//server/share unmounted for USER!"
echo
echo
echo
echo
echo
echo
else
echo "Mounting //server/share . "
mount -t cifs -o ro,iocharset=utf8,username=USER,password=P ASS,file_mode=0777,dir_mode=0777 //192.168.1.1/share /mnt/sdcard/cifs/share && \
echo "//server/share mounted for USER!"
echo
echo
echo
echo
echo
echo
fi
;;
"r")
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
*)
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
На первом скриншоте видно, что перед скриптом стоит команда sh, что позволяет запускать его с SD-карты в FAT32, где невозможно сделать chmod +x.
Зачем при этом у меня такой длинный путь к файлу, я напишу как-нибудь потом.
Теперь пара слов о самом скрипте.
Результат работы показан на втором скриншоте, после того как скрипт отработал окно автоматически закрывается.
Несколько пустых echo добавлено чтобы появляющийся поп-ап не закрывал вывод.
При запуске без параметров происходит загрузка всех модулей, l — список модулей, r — выгрузка, m — список смонтированных шар (только в cifs.sh v2.0). m c — монтирование/размонтирование; если шара смонтирована, происходит размонтирование, и наоборт.
ВАЖНО:
Скрипт использует grep, поэтому должен быть установлен BusyBox.
Исправьте переменную PATH , указав правильный путь до grep!
Также (хотя это и не будет влиять на запуск из-под GScript), исправьте/проверьте путь до интерпретатора sh в 1 строке.
Добавляя другие аргументы в case (например, m1, m2 и т.д) можно подключать несколько шар, или одну под разными юзерами. Естественно всё ограничивается лишь вашей фантазией.
Это решение мне показалось лучше в первую очередь тем, что скрипт можно легко редактировать, просто открыв в текстовом редакторе при подключении смартфона как USB-диска, или через SSH.
Как-нибудь позже я напишу об организации в Android одной среды как при запуске терминала, так и при подключении по SSH.
А пока что — с наступающим, юзернеймы! Ведь до 2012-го осталось меньше суток
Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER , PASS , SERV , SERVNAME и SHARE в строках 44-48, и добавить новый блок в case . Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).
Originally published at Shumaher’s_Blog. You can comment here or there.
CifsManager
версия: 1.5
Последнее обновление программы в шапке: 21.01.2011
Для функционирования программы необходимы права root пользователя.
Краткое описание:
Монтирование и использование сетевых ресурсов локально.
Описание:
Программа написана для монтирования и использования сетевых ресурсов на девайсе(локально) (к примеру: просмотр видео без ошибки "не поддерживается потоковая передача")
необходимо : root
ядро с поддержкой CIFS (cifs.ko)
Android >= 1.6
нашёл программку на просторах ресурса XDA,
уже доступна в маркете.
для поддержки кириллицы в опциях надо ввести iocharset=utf8 но работает это тлько с ядрами с поддержкой utf8
у Wildmonk's есть ядра с поддержкой UTF8 (кириллицы) (если не ошибся - только для Nexus one)
В версии 1.5 есть возможность загрузки нескольких модулей (указывать через двоеточие), пример:
/system/lib/modules/nls_utf8.ko:/system/lib/modules/cifs.ko
То есть возможно загружать сначала русские буквы, а потом сеть.
Перед тем как задавать вопрос - поищите по теме свой девайс!
ming39
Что-бы получить права полные, с удалением файлов, в свойствах через запятую пишем file_mode=0777
Кто с другими девайсами знаете где нарыть ядра с поддержкой UTF8 - пишите. прикреплю ;)
При добавлении шары в cifsmanager вводим путь к шаре, точку монтирования (лучше в /sdcard/cifs/), в поле options пишем "iocharset=utf8" без кавычек. Если шара доступна в сети (с других машин) без ввода логина/пароля - имя пользователя guest, пароль пустой. Иначе нужно ввести данные учетной записи для этой шары.
Если не получается получить доступ к шаре на win-системе (при монтировании возникает ошибка mount permission denied) - копать в сторону включения учетной записи гостя, для висты и 7ки в центре управления сетями и общим доступом отключить общий доступ с парольной защитой.
Для всех, кто искал или ищет модули (cifs.ko, slow-work.ko, nls_utf8.ko и на всякий случай tun.ko) для ядра 2.6.32.9-perf
Есть у меня на ZTE Blade от Билайна (E400) уже имелась папка /system/lib/modules/, но, как оказалось, в ней нужно создать папку 2.6.32.9-perf
затем, я сее для удобства создал файлик для автоматического запуска некоторых команд для подготовки файлов:
Затем, делаем скрипт исполняемым и запускаем:
Если Всё в порядке, то сначала просто выведется несколько пустых строчек, а затем ещё несколько непустых, в которых, если модули в порядке, будет:
[11-21 10:11:28.165911] [2080: insmod]Slow work thread pool: [b]Starting up[/b]
[11-21 10:11:28.175908] [2080: insmod]Slow work thread pool: [b]Ready[/b]
Создаём шару и в опциях пишем (пример для виндовых шар):
И ещё совет. Кто пользует XP и какого-то безпарольного пользователя, имеющего доступ к расшаренному ресурсу, чтобы шара открывалась без пароля, только с именем пользователя, лезем в Пуск/Настройки/Панель управления/Администрирование/Локальные политики безопасности. Или Пуск/Выполнить и пишем: secpol.msc
Там ищем Параметры безопасности/Локальные политики/Параметры безопасности и в списке справа почти в конце пункт "Учетные записи: ограничить использование пустых паролей только для консольного входа", дважды щелкаем мышкой и выбираем Отключить и затем жмём "Ок".
Сегодня смог подключить сетевую шару с помощью adb.
cifs.ko у меня находится на sdcard в /sdcard/cifs/cifs.ko.
Cifs.ko пришлось загрузить через adb:
После этого Cifsmanager без вопросов примонтировал шару.
[quote name="Святитель Киприц" date="18.09.2010, 10:09" post=5222961]Плохой новостью стало, что те файлы, которые имеют в названии кирилицу, мало того, что вопросительными знаками отображаются, так они еще и не открываются программами.
Решилось: закинул nls_utf8.ko в ту же папку, где у меня валяется cifs.ko и прописал в опциях как сказано здесь:
для поддержки кириллицы в опциях надо ввести iocharset=utf8 но работает это тлько с ядрами с поддержкой utf8
Всё заработало, русские буквы видны и все запускается!
Its works!
Прикрепил файлы, которые я использовал, может кому пригодятся: cifs.ko и nls_utf8.ko.
Cifs.zip
сначала обязательно нужно загрузить slow-work.ko, только потом сifs.ko
например
insmod slow-work.ko
insmod cifs.ko
поддержка utf8 уже есть в ядре, так что с опцией iocharset=utf8 русские имена папок и файлов показываются нормальноFroyo.zip
проверил на прошивке JPO - работает на ура.
HTC Wildfire S версия ядра 2.6.35.10-ga66971c
(zombierzn)Cifs.ko для Wildfire с версией ядра 2.6.29-6fb59e13 (WildPuzzleROM v7.1).
В архиве 2 файла (cifs.ko и nls_utf8.ko). Второй нужен для того чтоб русские файлы нормально отображались. Файлы надо положить в /system/lib/modules/.
Так и не понял как сделать в программе чтоб инициализировался не только cifs.ko но и nls_utf8.ko, поэтому делал в GScript.
Для монтирования:
insmod /system/lib/modules/cifs.ko
insmod /system/lib/modules/nls_utf8.ko
mount -o username=,password=,iocharset=utf8 -t cifs
где, - имя пользователя, - пароль, удаленная шара (напр. \\192.168.1.2\share), - папка на коммуникаторе (напр. \sdcard\share).
где - смонтированная папка на коммуникаторе.
При создании скриптов в GScript надо поставить галку "Needs SU?".
В GScript можно вынести ярлыки скриптов на рабочий стол и получится едва ли не удобнее чем в программе этой.
Надеюсь кому нибудь пригодится:)
buzz_2.6.29_6fb59e13.zip
Добавлю: Вполне вероятно что прога не умеет правильно находить куда впихнуть модуль или не корректно обращяется к busybox и команде insmod. поэтому можно пользоваться выше описанным способом,либо 1 раз через ADB или тот-же Gscript\ASE выполнить "insmod".
по поводу
В GScript можно вынести ярлыки скриптов на рабочий стол и получится едва ли не удобнее чем в программе этой.
то - я сам долгое время пользовался скриптами,но увы Gscript на каждую шару делает отдельный ярлык,а ASE делает папку сразу со всеми скриптами - что не очень удобно. ну если конечно есть более чем одна шара которую надо прикрутить ;)
- там в архиве был еще какой-то nls с utf-8, что такое не понял, думаю для поддержки кириллицы в путях, но как использовать не понятно.
- тут на форуме еще была ссылка на cifs моего ядра от официальной 2.2 я его не тестил, поскольку все и так работает.
Немного добавлю.
собрано для ядра 2.6.32.15 и немного не догнал что за значения arm-eabi-4.4.0 - может это на Десайре что обозначает?
далее входим в Рекавери(?) (Десайра не имею - не могу нормально обьяснить что это значит)
(boot into recovery mode)
$ adb shell mount /system
$ adb push cifs.ko /system/lib/modules
$ adb push nls_utf8.ko /system/lib/modules
$ adb shell chmod 644 /system/lib/modules/*.ko
$ adb shell "cd /system/lib/modules; ln -s . 2.6.32.15-gf9c0527"
$ adb shell umount /system
(reboot)
далее в программе при настройке шары,в последнем пунктике вводим iocharset=utf8
в принципе должно работать. кто с Десайром попробуйте и отпишитесь.
1) Во первых надо найти модули cifs.ko, nls_utf8.ko для версии ядра вашего девайса.
Ищем по шапке темы, на xda-developers.com. Если непонятно для какой версии найденные модули, ищем внутри них строчку "vermagic iocharset=utf8" без кавычек. Если шара доступна в сети (с других машин) без ввода логина/пароля - имя пользователя guest, пароль пустой. Иначе нужно ввести данные учетной записи для этой шары.
Если не получается получить доступ к шаре на win-системе (при монтировании возникает ошибка mount permission denied) - копать в сторону включения учетной записи гостя, для висты и 7ки в центре управления сетями и общим доступом отключить общий доступ с парольной защитой.
'[email protected]'
Запустил на Samsung Galaxy Ace. Прошивка OS 2.3.3 S5830XXKPE-S5830XXKPE-S5830SERKPE_HOME ядро 2.6.35.7-perf-CL185571
- Качаем Прикрепленный файлcifs.ko_for_samsung_galaxy_ace_2.3.3.rar
дальше все стандартно:
- Закидываем его в system/lib/modules и присваиваем атрибуты rw-r--r--
либо на карту памяти кому как удобно
- Ставим галочки Load cifs modeule и Load via insmod
- В настройках прописываем путь к модулю cifs.ko (например system/lib/modules/cifs.ko )
- Добавляем шару
* Сначала прописал просто адрес вида 192.168.1.120 ,так к сожалению не работает, нужно вводить адреса конкретных расшареных папок, например 192.168.1.120/torrents
-Указывает путь куда будем монтировать шару ( создаем заранее папку на карте с нужным именем )
- Вводим имя пароль, если доступ по учетным записям, если нет то имя guest
- В опциях пишем iocharset=utf8
* У меня сразу не заработало, а после перезагрузки, пробуйте
Вот! Появились дрова под Samsung Galaxy Tab. Только что проверил - все работает отлично на прошивке JK5! Файлы дров для файловой системы прилагаю
Инструкция по использованию для Acer Liquid
Как пользоваться:
!обязательно необходим root!
копируем cifs.ko и nls_utf8.ko в /sdcard/cifs/
цепляем расшаренную папку как локальную
mount -o username=,password= -t cifs /// /
например:
Заходим в Settings, ставим галку Load via insmod, Path to cifs.ko ставим /sdcard/cifs/cifs.ko:/sdcard/cifs/nls_utf8.ko
Заходим Add New Share. ->
Share Path /// (//192.168.1.1/public)
Mount Point / (/sdcard/public)
Username (guest)
Password
Options
Сохраняем.
Теперь жмем на только что созданную шару и выбираем mount, если все нормально напротив нее загорится зеленая точка.
Чтобы отключить жмем снова и выбираем umount.
скомпилил cifs.ko для Optimus GT540 2.1, пока без nls. Точно не помню, но по-моему, у нас русский и так канает.
ОП, добавь в шапку плз. Инструкции стандартные -
1) нам необходим аппарат с root-доступом. как сего добиться - смотрим форум
2) из прикрепленного архива извлечь модули nfs.ko и nls_utf8.ko в папку /system/lib/modules
3) дать обоим файлам права "rw-r--r--", делается легко root explorerom, как - смотрим форум
4) перезагрузиться
5) запустить CIFSManager и в настройках поставить галку "load via insmod"
6) создать собственно шару.
насчет nls - пока не знаю, как заставить грузиться автоматически. в том же root explorer идем в папку с модулями, запускаем какой-нибудь терминал, делаем "insmod nls_utf8.ko", естественно, предварительно закрыв CIFSManager и выгрузив модуль cifs.ko (rmmod cifs.ko), а еще лучше - перезагрузившись. и уже потом запускаем манагер и открываем шару.
Прикрепленный файл cifs.ko.zip ( 114.01 КБ )
кстати, линуксоидам на заметку - православнее нам будет использовать все-таки nfs. сам модуль я уже собрал, також sunrpc.ko и lockd.ko, есть прога - mountnfs, но сам nfs.ko подгрузить мне не удалось пока. вроде как помимо этих двух ему еще чего-то не хватает. есть заинтересованные?
Инструкция простая:
1. скачать cifs.ko
2. соединить TF с PC.
3. с помощью adb.exe:
Код
adb remount
adb push cifs.ko /system/lib/modules
adb reboot
в опциях настройки шары в CifsManager не забыть прописать
Код
iocharset=utf8
У меня все получилось ;o)
Двоеточие обозначает перечисление. Перезагружать не обязательно. После этого исчезает ошибка No such device. Проверено на Revolver 4.0 beta и ARHD 3.1.0 со стоковыми ядрами.
Процесс компиляции модулей ядра на примере Acer Liquid
распаковываем исходники в [папка исходников ядра] (к примеру ~/acer/kernel)
распаковываем toolchains в [папка toolchains] (~/acer/toolchains)
export ARCH=arm
export CROSS_COMPILE=[папка toolchains]/arm-2009q3/bin/arm-none-linux-gnueabi-
идем в [папка исходников ядра]
ищем defconfig для нашего аппарата, то бишь acer-q8k-a1-dvt_defconfig
дальше надо включить модули cifs и nls-utf8
File Systems -> Network File Systems ->
ставим
CIFS support (advanced network filesystem, SMBFS successor)
[*] Support legacy servers .
[*] CIFS extended attributes
[*] CIFS POSIX Extensions
[*] CIFS Experimental Features (EXPERIMENTAL)
Возможно не все эти опции нужны для успешной работы, можно поэкспериментировать))
File Systems -> Native language support ->
ставим
NLS UTF-8
выходим с сохранением конфига
компилим наши модули
make M=fs/cifs
make M=fs/nls
готовые .ko лежат [папка исходников ядра]/fs/cifs/cifs.ko и /fs/nls/nls_utf8.ko
Дополнение от USer13,
для нормальной сборки slow-work.ko
cp kernel/slow-work.* fs/cifs/
из файла kernel/timer.c скопировать код функций round_jiffies_common и round_jiffies в файл fs/cifs/slow-work.с ПЕРЕД функцией slow_work_schedule_cull
после этого в папке fs/cifs будет собираться рабочий slow-work.ko
01/21/2011 - Changes in v1.5:
- added multi-module load support
-- it's now possible to configure and load multiple kernel modules via CifsManager
-- specify multiple modules in the "Path to cifs.ko" preference by separating them via a colon ( : ).
-- e.g. /system/lib/modules/cifs.ko:/system/lib/modules/nls_utf8.ko
- you can now review the list of loaded kernel modules via the "Modules. " button in the "Info. " dialog
-- if your kernel has cifs support built-in, the cifs will not show up there, this is no problem
- added a rudimentary check to try to prevent mounting shares on the sdcard if it is unavailable (mass-storage-mode).
10/14/2010 - Changes in v1.41:
- fixed problem with keeping track of shares with symbolic links in Mount Point
09/07/2010 - Changes in v1.4:
- added link to changelog in "About. " dialog
- now available in Android market
09/03/2010 - Changes in v1.31:
- added correct quoting for special characters (",',<,[,\. )
-- for Share Path, Mount Point, Username, Password
-- using NICE mount points like /mnt/cifs/S-- eventual shell metacharacters in Options string have to be explicitly quoted
- re-added permission WRITE_EXTERNAL_STORAGE
-- so CifsManager is able to auto-create mount points on your SD-Card (without asking for root)
-- convenient and useful for feature crippled software like Rockplayer
09/01/2010 - Changes in v1.21:
- reworked the "Open Directory. " feature
-- should work with Estrongs (again) and Astro
-- due to the lack of a standard intent Estrongs is preferred if both file managers are installed
-- this command is available in a share's context menu when mounted
- changed the standard action for mounted shares to "Open Directory. "
08/31/2010 - Changes in v1.1:
- added elementary support for mounting NFS shares
-- works with nfs2/nfs3 shares, nfs4 not supported at the moment
-- specify the Share Path as : (e.g. 192.168.1.17:/mnt/Spajz)
-- Username and Password fields are ignored in this case
Remark:
- If you want to mount NFS shares you should have the basic knowledge to load the necessary kernel modules in an appropriate init script yourself.
- The newest version of EStrong FileExplorer lacks the necessary intent-filters to be launched with the "Open Directory. " context menu option.
08/20/2010 - Changes in v1.0:
- added option to directly open a Mount Point in file manager (browse directory)
-- works with popular file managers like EStrong or ASTRO
- added German language support
-- if you want to help translating the GUI to different languages please contact me
- removed menu option to refresh share states manually
Remark:
Unfortunately it's not possible to launch the file viewer of Rockplayer 1.0.31 (blame them). Rockplayer even lacks the necessary intent filters to be launched with a video file.
08/18/2010 - Changes in v0.99:
- added settings dialog to provide control over the following features:
-- default mount prefix (leave it at default if unsure about permissions/side-effects)
-- load cifs module on startup (on/off)
-- module load method (modprobe/insmod)
-- module location (when insmod is selected)
- Removed all references to sdcard to prevent side effects with USB-Mass-Storage mode
-- new default mount prefix is /mnt/cifs, try to avoid mounting shares on sdcard directories
-- /mnt/cifs should also work on devices with write disabled root filesystems like HTC Desire
-- fixed permission problems with mount points created by CifsManager (files not showing up in File Managers etc.)
-- moved persistent settings from sdcard to android default location (/data/data)
- added menu option to unmount all currently mounted cifs shares
- added menu option to refresh share states manually
- share states now synchronized with kernel mount list on activity resume
Updated to v0.93
Changes:
- Fixed problem in serialization code (shares should be saved correctly now)
- Try to automatically insert CIFS module (only on initial startup)
- added "options" value to Share settings so arbitrary additional mount options can be specified (separate options with comma ,)
Updated the apk to v0.91:
- Mountpath will be created (if needed and possible)
- Settings are stored on SDCARD (/sdcard/cifs/cifsshares.dat)
- Added permission to write to SDCARD
В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.
Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER , PASS , SERV , SERVNAME и SHARE в строках 44-48, и добавить новый блок в case . Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).
В прошлый раз я написал, как монтировать расшаренные папки Windows в Android-смартфон: о сборке необходимого модуля cifs.ko и зависимостей для него. Само монтирование было сделано при помощи стандартной команды mount, но каждый раз открывать эмулятор терминала и вводить длинные команды, конечно же, мягко говоря, не очень удобно.
Поэтому сегодня я расскажу о двух приложениях, которые позволят монтировать всего в 1-2 тапа пальцем. На одно из них я уже давал ссылку в предыдущем посте.
CifsManager
Описание есть на форуме 4PDA, поэтому подробно останавливаться на этом приложении я не буду.
Стоит только отметить правильный порядок модулей в опции Path to cifs.ko (видно на скриншоте).
А так же при создании шары не забудьте в опциях вбить iocharset=utf8,file_mode=0777,dir_mode=0 777
Прямо из приложения можно открыть установленным файловым менеджером подключенный ресурс, что плюс.
А минус — нет бэкапа опций на SD, потому что их достаточно много. Так что при, например, перепрошивке, всё нужно будет вбивать заново (если не пользоваться прогами для бэкапа).
Но главное — оно работает, и позволяет монтировать в 2 тапа пальцем по экрану: запуск приложения + тап по нужной шаре.
GScript
Это приложение предназначено не именно для монтирования, а для запуска вообще любых скриптов. Также поддерживает создание ярлыков, что и позволяет монтировать шары в один тап.
Имеются функции и сохранения/загрузки скриптов с SD-карты.
Полезные скрипты можно найти в теме на XDA.
Ну а теперь к монтированию.
Можно было бы, конечно, просто вбить все команды из предыдущего поста: insmod, mount и unount. Но это всё равно долго и нудно (особенно если подключаемых ресурсов несколько), поэтому я для себя решил наговнокодить скрипт, чтобы все нужные команды были в одном обычном sh-файле, который можно будет запускать не только из GScript, но и при необходимости из терминала.
cifs.sh:
старый вариант скрипта, новый смотрите ниже
export PATH=/data/data/berserker.android.apps.s shdroid/home/bin:$PATH
"m")
if mount | grep -Fq 'unc=\192.168.1.1\share,username=USER'
then
echo "UnMounting //server/share . "
umount -f -l /mnt/sdcard/cifs/share
echo "//server/share unmounted for USER!"
echo
echo
echo
echo
echo
echo
else
echo "Mounting //server/share . "
mount -t cifs -o ro,iocharset=utf8,username=USER,password=P ASS,file_mode=0777,dir_mode=0777 //192.168.1.1/share /mnt/sdcard/cifs/share && \
echo "//server/share mounted for USER!"
echo
echo
echo
echo
echo
echo
fi
;;
"r")
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
*)
cd /mnt/sdcard/cifs/modules/$(uname -r)/ && \
На первом скриншоте видно, что перед скриптом стоит команда sh, что позволяет запускать его с SD-карты в FAT32, где невозможно сделать chmod +x.
Зачем при этом у меня такой длинный путь к файлу, я напишу как-нибудь потом.
Теперь пара слов о самом скрипте.
Результат работы показан на втором скриншоте, после того как скрипт отработал окно автоматически закрывается.
Несколько пустых echo добавлено чтобы появляющийся поп-ап не закрывал вывод.
При запуске без параметров происходит загрузка всех модулей, l — список модулей, r — выгрузка, m — список смонтированных шар (только в cifs.sh v2.0). m c — монтирование/размонтирование; если шара смонтирована, происходит размонтирование, и наоборт.
ВАЖНО:
Скрипт использует grep, поэтому должен быть установлен BusyBox.
Исправьте переменную PATH , указав правильный путь до grep!
Также (хотя это и не будет влиять на запуск из-под GScript), исправьте/проверьте путь до интерпретатора sh в 1 строке.
Добавляя другие аргументы в case (например, m1, m2 и т.д) можно подключать несколько шар, или одну под разными юзерами. Естественно всё ограничивается лишь вашей фантазией.
Это решение мне показалось лучше в первую очередь тем, что скрипт можно легко редактировать, просто открыв в текстовом редакторе при подключении смартфона как USB-диска, или через SSH.
Как-нибудь позже я напишу об организации в Android одной среды как при запуске терминала, так и при подключении по SSH.
А пока что — с наступающим, юзернеймы! Ведь до 2012-го осталось меньше суток
Обновил скрипт cifs.sh — теперь использование стало более наглядным: для добавления шар достаточно изменить переменные USER , PASS , SERV , SERVNAME и SHARE в строках 44-48, и добавить новый блок в case . Добавлено монтирование в режиме только-чтение в зависимости от используемого пользователя (строка 18, опционально).
Originally published at Shumaher’s_Blog. You can comment here or there.
Читайте также: