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.