Should add to linux-sunxi-3.4:
-changes to only move data from erase block to free block
on else condition, see diff line 3830 - 3921
-changes for read-retry for different vendors staring diff line 4137 - 4652,
5093 - 6015
-new nand id-s at diff line 6178 - 6256, 6404 - 6423
Not really necessary:
-page size hack at diff line 4825, only needed for initial programming
-lots of changes to make sector bitmap 64 bits,
only needed with really big nand-s
---------- Сообщение добавлено 23.12.2013 в 12:51 ----------
Из A13 SDK 1.5 удалось успешно позаимствовать определения из файлов include/linux/pm.h и include/linux/system.h, а также файлы конфигурации машины arch/arm/mach_sun5i/ в полном объеме. Это позволило расширить инструкции ядра в часть Power Managment (pm), в частности, подключить инструкцию standby_type, требуемую для работы драйвера NAND от версии 0x2 0x10 и выше. Сам модуль 0х2 0х12, рассчитанный на сборку с конфигурацией ядра и исходным кодом linux-3.3, переделать под платформу sun5i сходу не получилось, и его лучше собирать как независимый модуль. Близкий по структуре 0x2 0x10 после обновления кода для PM собирается без ошибок, но тоже несовместим с NAND на тестируемом устройстве (Prestigio PMP3670B). Проверка работоспособности и отладка ядра осуществлялась путем подстановки в Recovery CWM с последующей прошивкой и загрузкой с данного раздела:
Код:
cat recovery.img > /dev/block/nandg
Вложение 492938
Для других устройств необходимо заменять nand.ko и sw-keyboard.ko из стоковой прошивки с коррекцией vermagic=3.0.8+ preempt mod_unload ARMv7
Напоминаю, что в данном ядре modversions отключены (собственно, для этого и пришлось заняться разработкой собственного ядра взамен стокового).
Модули звука (как SoC, так и USB Audio) также успешно собираются, попробую сделать CyanogenMod c этими исходниками.
24.12.2013, 01:55
HoSStiA
Вложений: 1
Re: Андроид зеркало на Allwinner A13
Встроил поддержку ALSA SoC непосредственно в ядро, как в стоке:
Небольшая "работа надо ошибками", сборка linux-3.0 из SDK 1.5, включился планировщик SHED_CLOCK.
Цитата:
<6>sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
<4>aw_clksrc_init, line:339
29.12.2013, 22:48
Rover
Re: Андроид зеркало на Allwinner A13
Столько непонятных и красивозавораживающих фраз, символов, и не побоюсь этого слова ЗАГОГУЛИН.....
Продолжение.... следует? :popcorm2:
03.01.2014, 03:36
HoSStiA
Вложений: 1
Re: Андроид зеркало на Allwinner A13
Цитата:
Сообщение от Rover
Столько непонятных и красивозавораживающих фраз, символов, и не побоюсь этого слова ЗАГОГУЛИН.....
Продолжение.... следует?
Rover, не побоюсь утверждать, что вскоре придется и китайский воспринимать как нечто прекрасное и вызывающее уважение.
После очередной недели глубокой медитации, на кастомном ядре уже запускается CM9.1 собственной сборки (извиняюсь за мой испанский) Вложение 497548
Хотел сделать себе подарок к НГ, но уткнулся в несовместимость библиотек Mali400 из Android 4.2.2 (с которым пришел pmp3670b) и Android 4.0.4, на базе которого собран CM9. К счастью, подошли библиотеки из старой прошивки 4.0.4 от pmp3570c, идентичного по железу, и после пересборки libEGL.so, графическая оболочка запустилась с поддержкой сенсорного экрана и графического ускорителя.
Для совместимости со стоковым /system/lib/hw/audio.primary.sun5i.so необходимо еще поработать с модулями ядра, чтобы добавить некоторые отсутствующие инструкции, которая эта библиотека затребовала ("Playback PAMUTE SWITCH", к примеру, http://4pda.ru/forum/index.php?showt...ost&p=17162771 ), которые присутствуют инженерной версии sound/soc/sun5i_codec.c , но не включены в sun5i_codec.c из github.com репозитория linux-sunxi/linux-sunxi (!):
Код:
static const struct snd_kcontrol_new codec_snd_controls[] = {
//FOR B C VERSION
/*SUN4I_DAC_ACTL = 0x10,PAVOL*/
CODEC_SINGLE("Master Playback Volume", SUN5I_DAC_ACTL,0,0x3f,0),
/*total output switch PAMUTE,if set this bit to 0, the voice is mute*/
CODEC_SINGLE("Playback PAMUTE SWITCH", SUN5I_DAC_ACTL,6,1,0),
/*mixer output switch MIXPAS*/
CODEC_SINGLE("Playback MIXPAS", SUN5I_DAC_ACTL,7,1,0),
/*system digital voice output switch DACPAS*/
CODEC_SINGLE("Playback DACPAS", SUN5I_DAC_ACTL,8,1,0),
/*from bit 9 to bit 12.Mic1/2 output switch.
MIC1LS MIC1RS MIC2LS MIC2RS
0x0 mute mute mute mute
0x3 mute mute not mute not mute
0x12 not mute not mute mute mute
0x15 not mute not mute not mute not mute
0x0*/
CODEC_SINGLE("Mic Output Mix",SUN5I_DAC_ACTL,9,15,0),
/*Left DAC to right output mixer mute*/
CODEC_SINGLE("Ldac Right Mixer",SUN5I_DAC_ACTL,13,1,0),
/*Right DAC to right output mixer mute*/
CODEC_SINGLE("Rdac Right Mixer",SUN5I_DAC_ACTL,14,1,0),
/*Left DAC to left output mixer mute*/
CODEC_SINGLE("Ldac Left Mixer",SUN5I_DAC_ACTL,15,1,0),
/*right FM to right output mixer mute*/
CODEC_SINGLE("FmR Switch",SUN5I_DAC_ACTL,16,1,0),//Fm right switch
/*Left FM to left output mixer mute*/
CODEC_SINGLE("FmL Switch",SUN5I_DAC_ACTL,17,1,0),//Fm left switch
/* Right LINEIN gain stage to right output mixer mite,
* When LNRDF is 0, right select LINEINR
* When LNRDF is 1, right select LINEINL-LINEINR
*/
CODEC_SINGLE("LineR Switch",SUN5I_DAC_ACTL,18,1,0),//Line right switch
/* Left LINEIN gain stage to left output mixer mite,
* When LNRDF is 0, left select LINEINL
* When LNRDF is 1, left select LINEINL-LINEINR
*/
CODEC_SINGLE("LineL Switch",SUN5I_DAC_ACTL,19,1,0),//Line left switch
/* MIC1/2 gain stage to output mixer Gain Control
* From -4.5db to 6db,1.5db/step,default is 0db
* -4.5db:0x0,-3.0db:0x1,-1.5db:0x2,0db:0x3
* 1.5db:0x4,3.0db:0x5,4.5db:0x6,6db:0x7
*/
CODEC_SINGLE("MIC output volume",SUN5I_DAC_ACTL,20,7,0),
/* FM Input to output mixer Gain Control
* From -4.5db to 6db,1.5db/step,default is 0db
* -4.5db:0x0,-3.0db:0x1,-1.5db:0x2,0db:0x3
* 1.5db:0x4,3.0db:0x5,4.5db:0x6,6db:0x7
*/
CODEC_SINGLE("Fm output Volume",SUN5I_DAC_ACTL,23,7,0),//Fm output volume
/* Line-in gain stage to output mixer Gain Control
* 0:-1.5db,1:0db
*/
CODEC_SINGLE("Line output Volume",SUN5I_DAC_ACTL,26,1,0),//Line output volume
/*Analog Output Mixer Enable*/
CODEC_SINGLE("MIX Enable",SUN5I_DAC_ACTL,29,1,0),
/*Internal DAC Analog Left channel Enable*/
CODEC_SINGLE("DACALEN Enable",SUN5I_DAC_ACTL,30,1,0),
/*Internal DAC Analog Right channel Enable*/
CODEC_SINGLE("DACAREN Enable",SUN5I_DAC_ACTL,31,1,0),
CODEC_SINGLE("Mic1outn Enable",SUN5I_ADC_ACTL,12,1,0),
CODEC_SINGLE("LINEIN APM Volume", SUN5I_ADC_ACTL,13,0x7,0),
/*
*0:Line-in right channel which is independent of line-in left channel
*1:negative input of line-in left channel for fully differential application
*/
CODEC_SINGLE("Line-in-r function define",SUN5I_ADC_ACTL,16,1,0),
/*ADC Input source select
* 000:left select LINEINL, right select LINEINR; or, both select LINEINL-LINEINR,depending on LNRDF(bit 16)
* 001:left channel select FMINL & right channel select FMINR
* 010:both MIC1
* 011:both MIC2
* 101:MIC1+MIC2 capture
* 110:left select output mixer L & right select
* 111:left select LINEINL or LINEINL-LINEINR, depending on LNRDF(bit 16),right select MIC1 gain stage
*/
CODEC_SINGLE("ADC Input source",SUN5I_ADC_ACTL,17,7,0),
/*ADC Input Gain Control, capture volume
* 000:-4.5db,001:-3db,010:-1.5db,011:0db,100:1.5db,101:3db,110:4.5db,111:6db
*/
CODEC_SINGLE("Capture Volume",SUN5I_ADC_ACTL,20,7,0),
/*
* MIC2 pre-amplifier Gain Control
* 00:0db,01:35db,10:38db,11:41db
*/
CODEC_SINGLE("Mic2 gain Volume",SUN5I_ADC_ACTL,23,3,0),
/*
* MIC1 pre-amplifier Gain Control
* 00:0db,01:35db,10:38db,11:41db
*/
CODEC_SINGLE("Mic1 gain Volume",SUN5I_ADC_ACTL,25,3,0),
/*
* VMic enable
*/
CODEC_SINGLE("VMic enable",SUN5I_ADC_ACTL,27,1,0),
/*
* MIC2 pre-amplifier enable
*/
CODEC_SINGLE("Mic2 amplifier enable",SUN5I_ADC_ACTL,28,1,0),
/*
* MIC1 pre-amplifier enable
*/
CODEC_SINGLE("Mic1 amplifier enable",SUN5I_ADC_ACTL,29,1,0),
/*
* ADC Left Channel enable
*/
CODEC_SINGLE("ADCL enable",SUN5I_ADC_ACTL,30,1,0),
/*
* ADC Right enable
*/
CODEC_SINGLE("ADCR enable",SUN5I_ADC_ACTL,31,1,0),
};
Если пойти путем наименьшего сопротивления, после этого шага можно собрать alsa_libs и alsa_utils, и вместе с кастомным ядром и модулями попытаться внедрить в стоковою прошивку на имеющихся устройствах. Впрочем, это никак не мешает параллельно доводить ума сборку CM9.1.
03.01.2014, 05:58
HoSStiA
Re: Андроид зеркало на Allwinner A13
При совмещении исходного кода выявилась группа определений из драйвера ревизии "B", пересекающихся с определениями из драйвера ревизии "B C", но именованных несколько иначе. Привожу их здесь. Необходимость использовать нижеследующие определения может выявиться при старте сервиса AudioFlinger во время запуска Android (мониторинг командой logcat ).
Код:
//FOR B VERSION
CODEC_SINGLE("Playback Switch", SUN5I_DAC_ACTL,6,1,0),//全局输出开关
CODEC_SINGLE("Fm Volume",SUN5I_DAC_ACTL,23,7,0),//Fm 音量
CODEC_SINGLE("Line Volume",SUN5I_DAC_ACTL,26,1,0),//Line音量
CODEC_SINGLE("MicL Volume",SUN5I_ADC_ACTL,25,3,0),//mic左音量
CODEC_SINGLE("MicR Volume",SUN5I_ADC_ACTL,23,3,0),//mic右音量
CODEC_SINGLE("Mic Input Mux",SUN5I_DAC_ACTL,9,15,0),//from bit 9 to bit 12.Mic(麦克风)输入静音
CODEC_SINGLE("ADC Input Mux",SUN5I_ADC_ACTL,17,7,0),//ADC输入静音
Также есть интересный комментарий для поклонников соревновательного движения, при вызове одной из процедур внутри функции codec_play_stop:
Код:
codec_wr_control(SUN5I_DAC_DPC , 0x1, DAC_EN, 0x0); // it will cause noise
По всей видимости, теоретически можно программно убирать щелчки при остановке воспроизведения / выключении. ;)
Сейчас собирается очередная новая версия CM9 с библиотеками ALSA для ICS 4.0.4 из репозитория https://github.com/STS-Dev-Team .
Если не возникнет критических ошибок, надеюсь в скором времени получить на выходе библиотеку /system/lib/hw/audio.primary.Exdroid.so с поддержкой USB-устройств.
Имеем первую работающую версию библиотек, с настройками под устройство в /system/build.prop
Код:
# Обязательно для идентификации платформы
ro.product.board=nuclear
# Опционально, устройство вывода, если отличается от pcmC1D0
usb.audio.out.device = pcmC1D0p
# Опционально, устройство записи, если отличается от pcmC0D0
usb.audio.cap.device = pcmC0D0p
Подгружаемые модули ядра остаются теми же, последовательность загрузки "читать" снизу вверх:
Цитата:
snd_usb_audio 69341 1 - Live 0x00000000
snd_usbmidi_lib 14207 1 snd_usb_audio, Live 0x00000000
snd_rawmidi 13808 1 snd_usbmidi_lib, Live 0x00000000
snd_hwdep 4152 1 snd_usb_audio, Live 0x00000000
Известные проблемы:
ядру категорически не нравится, когда карту выдирают/вставляют в момент воспроизведения, что отчасти может связано с этим замечанием от одного разработчика другому:
, и тем не менее при написании драйвера пришлось воспользоваться этим неофициальным кодом для библиотеки tinyalsa.so ,
отчасти что такое обращения не совсем предусмотрено драйвером OTG. Мягко говоря, китайцы их бросили "сырыми" где-то на середине доведения до ума, и переключились на написание драйверов для новых процессоров A20 и A31, и в последних ядрах они уже унифицированы под всё семейство sunxi, включая A10 и A13. Поэтому под Linux для A13 на ядре 3.4 поддержку USB Audio добиться намного проще, но подавляющее большинство пропиетарных (без исходного кода) драйверов для Android будет работать только с ядром 3.0.8+, и пока никак иначе.
карте, похоже, очень не нравится, когда основное устройство доходит до состояния late_suspend (глубокого сна) по отсутствию активности,
потому что по выходу из этого режима она не всегда может проснуться. Скорее всего, также связано с недоработками в ядре. Причем при временном отключении кнопкой "POWER" или командой
Код:
echo standby > /sys/power/state
такого не наблюдается (хотя, по сути, то же самое). Но настолько глубоко погружаться в PowerManagerService самого Android пока нет времени, тем более в автомобилях устройства мультимедиа, обычно, не переходят самопроизвольно в спящий режим.
08.01.2014, 07:35
HoSStiA
Вложений: 1
Библиотеки были собраны вместе с CyanogenMod 9.1.0 и исходным кодом ядра 3.0.8 для A13 с доработанными кодеками sun5i_codec, совместимыми библиотеками ALSA для AOSP ICS и GB, найденными на http://githube.com, странной "дикой" версией tinyalsa из неофициальной ветки
Таким образом, могу считать себя лично автором данной адаптации для сообщества МАГНИТОЛА, так как тот же Cristian Troy после A10-х переключился на программирование под A31:
Теоретически, usb audio теперь можно получить на любом sun5i устройстве, для которого получится собрать CyanogenMod 9 с моей версией Linux'а для a13_nuclear. Также в ближайшие недели собираюсь заняться CyanogenMod 10.1 (Android 4.2.2), используя имеющиеся в моем распоряжении наработки.
Всех с прошедшими Новым Годом и Рождеством!
P.S.:
Цитата:
Сообщение от HoSStiA
карте, похоже, очень не нравится, когда основное устройство доходит до состояния late_suspend (глубокого сна) по отсутствию активности,
В обновленной версии из вложения наметились тенденции к улучшению.