본문 바로가기

PROJECT/ex347_project

분석!!!]]]Mini2440_gpio-LED] 의 하나를 gpio 로 빼보자.

왜 이 LED가 깜빡이는 녀석은 모듈로 올라가지 않았을까?

이녀석은 built-in되서 kernel 이 init 되는 시기에 호출된다.

이것을 확인하기 위해서 우리는 타겟 보드를 컴퓨터와 nfs로 연결시킬 필요가 있다.

nfs연결 방법은... http://kkangstory.tistory.com/entry/Mini2440Kernel-Source여기서 ....^^

minicom으로 직접 타겟소스를 확인해 보자~

지금 HOST(Computer)의 "/opt/FriendlyARM/mini2440/rootfs_qtopia_qt4" 가 nfs의 root로 잡혀 있다.

여기서 한번 nfs filesystem을 보자~^^

앞으로 /opt/FriendlyARM/mini2440/rootfs_qtopia_qt4 를 r_q_qt4 라고 하겠다.

r_q_qt4/etc/init.d/rcS 파일을 열어보면....
(rcS 파일을 여는 이유는 이 파일은 커널 부팅완료후에 제일먼저 실행된다.-데몬같은것을 실행하는 녀석이다.)
==============================================
 38 syslogd
 39 /etc/rc.d/init.d/netd start
 40 echo "                        " > /dev/tty1
 41 echo "Starting networking..." > /dev/tty1
 42 sleep 1
 43 /etc/rc.d/init.d/httpd start
 44 echo "                        " > /dev/tty1
 45 echo "Starting web server..." > /dev/tty1
 46 sleep 1
 47 /etc/rc.d/init.d/leds start
 48 echo "                        " > /dev/tty1
 49 echo "Starting leds service..." > /dev/tty1
 50 echo "                        "
 51 sleep 1
 52 
 53 /sbin/ifconfig lo 127.0.0.1
 54 /etc/init.d/ifconfig-eth0
 55 
 56 /bin/qtopia &
 57 echo "                                  " > /dev/tty1
 58 echo "Starting Qtopia, please waiting..." > /dev/tty1
 59 
==============================================
이와 같은 내용이 있다.

빨간색줄을 보면 /etc/rc.d/init.d/leds start 를 해주는데.
바로 저 쉘명령이 led들이 깜빡이는 것을 시작하게 해주는 명령이다.
그러면 한번 /etc/rc.d/init.d/leds 파일을 열어보자.
=================================
  1 #!/bin/sh
  2 
  3 base=led-player
  4 
  5 # See how we were called.
  6 case "$1" in
  7   start)
  8                 /usr/bin/$base &
  9         ;;
 10   stop)
 11         pid=`/bin/pidof $base`
 12         if [ -n "$pid" ]; then
 13                 kill -9 $pid
 14         fi
 15         ;;
 16 esac
 17 
 18 exit 0
=================================
이와 같다.
이녀석은 2가지를 골라서 쓰돌고 하는데
첫번째는 start 를 뒤에 붙이는 경우와
두번째는 stop 을 뒤에 붙이는 경우가 있다. 


즉,
$ /etc/rc.d/init.d/leds start
$ /etc/rc.d/init.d/leds stop
이 두가지 이다. 
 

그리고 이때 정확히 내려지는 쉘명령어는
$ /etc/rc.d/init.d/leds start 는
$ /usr/bin/led-player 이고,

$ /etc/rc.d/init.d/leds stop 는
$ kill -9 led-player 이다. 

결론적으로!!!
kernel init시에 led-player명령(혹은 /usr/bin/led-player명)으로 led의 깜빡임을 시작시키는 것이 었다.