Com a ajuda do livro "Embedded Android", de Karim Yaghmour, consegui aprender o suficiente sobre o processo de criação do Android no ano passado. Com o suficiente para mexer no Google'ing, aprendi uma quantidade suficiente de comandos * nix com apenas scripts Bash suficientes para criar uma pequena ROM CM-10.1, que monta um arquivo .img
do Linux durante a inicialização.
Meu laptop recentemente ficou inoperável após uma instalação em lote do Windows, portanto, essa pequena ROM tornou-se minha única fonte de capacidade de computação suficiente.
Deixando de lado a história, tenho andado por aí com alguns utilitários de linha de comando, como nvlc
e stagefright
. stagefright
não é uma surpresa, pois é um aplicativo Android "nativo".
Usando o seguinte comando:
stagefright -ao test.mp3
Eu posso lançar uma música e ouvi-la, enquanto ssh
entrou no meu dispositivo. Eu geralmente uso emulador de terminal para usar o su
do CM para obter o glibc sshd
rodando assim:
su -c '/bin/su'
service ssh start
Então, eu ssh
da minha torre antiga , que tem um teclado e uma tela grande. Como estou ssh
no servidor ssh
baseado em glibc, ele usa o módulo unix2 do PAM para autenticar com /etc/passwd
e /etc/shadow
. Isso é legal, já que eu posso configurá-lo como estou acostumado.
De lá, digamos que eu queira lançar nvlc
para bloquear, não vai funcionar.
E bem, stagefright
não é tão bom quanto nvlc
na minha opinião.
Esta é uma saída do que eu fiz até agora:
root@Flubber:/sdcard/Music$ lspci
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.
root@Flubber:/etc/init.d# aplay --list-devices
**** List of PLAYBACK Hardware Devices ****
card 0: msm8960sndcard [msm8960-snd-card], device 0: MultiMedia1 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 1: MultiMedia2 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 2: CS-Voice (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 3: VoIP (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 4: LPA (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 5: SLIMBUS_0 Hostless (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 6: INT_FM Hostless (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 7: AFE-PROXY RX msm-stub-rx-7 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 9: COMPR (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 10: AUXPCM Hostless (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 11: HDMI_RX_HOSTLESS (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 12: VoLTE (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 13: Voice2 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 14: MultiMedia5 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 15: (Internal BT-SCO Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 17: (Internal FM Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 19: (HDMI Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 20: (AFE Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 22: (AUX PCM Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 24: (Voice Farend Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: msm8960sndcard [msm8960-snd-card], device 27: (Primary I2S Playback) []
Subdevices: 1/1
Subdevice #0: subdevice #0
root@Flubber:/etc/init.d# ./alsa-utils start 0
[ ok ] Setting up ALSA card 0...done.
brainard@Flubber:/sdcard/Music$ cvlc SlipKnoT\ -\ Spit\ It\ Out\ \[DUBSTEP\ REMIX\ by\ Elysium\]\ \*with\ musicvideo\*\ \[HD\ \].mp3
VLC media player 2.0.3 Twoflower (revision 2.0.2-93-g77aa89e)
[0x92c0c8] inhibit interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
[0x92c0c8] main interface error: no suitable interface module
[0x8b4b80] main interface error: no suitable interface module
[0x8943e8] main libvlc error: interface "globalhotkeys,none" initialization failed
[0x8b4b80] dummy interface: using the dummy interface module...
shm_open() failed: Permission denied
[0x8b5448] pulse audio output error: PulseAudio server connection failure: Connection refused
shm_open() failed: Permission denied
[0x8b5448] alsa audio output error: cannot open ALSA device "default": Invalid argument
[0x8b5448] main audio output error: Audio output failed
[0x8b5448] main audio output error: The audio device "default" could not be used:
Invalid argument.
[0x8b5448] oss audio output error: cannot open audio device (/dev/dsp)
[0x8b5448] main audio output error: no suitable audio output module
[0x8b7f80] main decoder error: failed to create audio output
[0x9200b0] main input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 300 ms)
[0x9200b0] main input error: ES_OUT_RESET_PCR called
^C
Eu instalei o alsa-utils
como você pode ver, bem como pulseaudio
e atribuí meu usuário ao grupo de áudio de GID 1005
, porque esse é o GID de áudio no Android.
Não tenho certeza se isso é um problema de configuração, um problema de driver ou outra coisa. Eu nunca precisei configurar o áudio antes, ele sempre funcionou no Linux.
Como isso está em um dispositivo Android, não esperava que funcionasse, mas, novamente, outras coisas funcionam como o acesso à rede e a gravação em sdcards. Eu tive que criar grupos e adicionar meu usuário a eles, embora para obter permissão do Android.
Até onde eu sei, o Android usa minúsculas alas algumas vezes, e pode usar o HAL, mas nesse momento, é um pouco acima da minha cabeça.
Qual seria uma boa fonte de informação?
Eu realmente não quero gastar muito tempo com isso, uma semana ou duas vezes, informações ruins desperdiçaram muito do meu tempo no passado, o que pode ser muito frustrante.
Eu tropecei em um tópico nos fóruns do Gentoo enquanto estava no Google com alguns dos erros que eu tenho recebido e o tmpfs realmente tem que ser montado em /run/shm
.
Então eu coloco isso no meu arquivo /etc/fstab
, de acordo com o tópico nos fóruns do Gentoo:
none /dev/shm tmpfs nodev,nosuid,noexec 0 0
e, em seguida, executou sudo mount /dev/shm
. Então eu fiz:
brainard@Flubber:/sdcard/Music$ aplay -vv Track_1.wav
**aplay: main:682: audio open error: Invalid argument**
e obteve essa saída: no failure to open shared memory
.
Além disso, em /proc/asound
:
brainard@Flubber:/proc/asound$ ls
card0 cards devices hwdep msm8960sndcard pcm timers version
brainard@Flubber:/proc/asound$ cat version
Advanced Linux Sound Architecture Driver Version 1.0.25.
E o speaker-test
:
brainard@Flubber:/proc/asound/card0$ speaker-test -Ddefault:0 -twav
speaker-test 1.0.25
Playback device is default:0
Stream parameters are 48000Hz, S16_LE, 1 channels
WAV file(s)
Playback open error: -22,Invalid argument
Espero que isso ajude alguém a me ajudar e agradeço antecipadamente. Se você precisar de mais alguma informação, basta perguntar, eu ficarei feliz em.
Atualização 2
Eu abri alsamixer
e descobri mais de 300 "itens" diferentes (mais de 400 +, parei de contar a 300) relacionados a esse único cartão. Alguns deles têm a ver com HDMI, outros com VoIP, alguns com VoLTE, a maioria é silenciada, desativada ou em zero e eu não tenho ideia do que eles são. Eu suponho que se alguém soubesse o que estava fazendo e conseguisse que isso funcionasse, poderia ser bastante poderoso.
Eu corri isto: alsactl init
root@Flubber:/etc/init.d# alsactl init
Found hardware: "msm8960-snd-car" "" "" "" ""
Hardware is initialized using a generic method
E parece que depois de tudo isso, stagefright
não funciona mais. Ele apenas retorna segfault
Eu acho que é minha culpa;) Espero que um reboot conserte isso.
Tags android pulseaudio alsa linux audio