Histórico:
Eu uso o Debian Lenny em um dispositivo embutido
uname -a
Linux device 3.4.0 #83 Sun May 26 17:07:14 CEST 2013 armv4l GNU/Linux
Eu tenho um código C (digamos my_C_program
) que chama um arquivo binário específico da placa (via system("spictl someparameters")
) chamado spictl
para usar a interface SPI
user:~# ls -al /usr/local/bin/spictl
lrwxrwxrwx 1 root staff 24 Jun 9 2011 spiflashctl -> /initrd/sbin/spiflashctl
se eu executar meu código ( my_C_program
) na linha de comando
user:~# /user/sbin/my_C_program
o spictl
é executado sem problemas e gera dados da interface SPI.
Problema:
Eu preciso que o programa seja executado quando a placa estiver ligada. Portanto, adiciono /user/sbin/my_C_program
linha antes do exit 0
at /etc/rc.local
. Quando a placa é energizada, o my_C_program é executado e spictl
é executado, mas a interface SPI não produz nenhum dado.
Eu tentei executar o programa via script /etc/init.d/
em este link . O script funciona bem e executa o my_C_program
, o programa executa o spictl
com sucesso (como diz o valor de retorno system()
), mas a interface SPI não produz nenhum dado!
ls -l /usr/sbin/my_C_program
-rwxrwxrwx 1 root root 61713 Jun 28 2013 /usr/sbin/my_C_program
top
mostra que o programa é executado como root
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1095 root 20 0 2524 1140 924 R 4.2 1.8 0:00.35 top
1033 root RT 0 35092 34m 1852 S 3.0 56.5 0:14.06 node
Pergunta
se eu executar o terminal my_C_program
on, o programa chama o spictl
(via system(spictl someparameters)
) e ele é executado sem nenhum problema. Mas se eu executar o script my_C_program
a /etc/rc.local
ou /etc/init.d
, então spictl
não funcionará como deveria ser. Eu suspeito que isso tenha algo a ver com o privilégio de root. Quando executo o programa no terminal (como root) tudo funciona bem. Mas eu acho que /etc/rc.local
e /etc/init.d
de alguma forma executa o programa com um privilégio menor. Eu não consegui realmente resolver a diferença entre executar um comando do terminal como root ou executar o programa via script /etc/rc.local
ou /etc/init.d/
. Se você também acha que é um problema de privilégio, poderia explicar como posso garantir que o script init.d ou rc.local executaria o programa com o maior privilégio. Ou qual poderia ser o problema?
Por favor, note que o problema / questão não é relacionado ao SPI.
P.S. para não ter conversas desnecessárias como "oh Debian lenny é muito antigo, você deveria usar wheezy etc.", o fórum tem processador armv4l e como o produtor diz que não suporta wheezy por causa de algumas instruções do processador.