2016년 4월 10일 일요일

Linux 프로세스 정지시키기


일반적으로 많이 쓰이는 kill 명령어로 프로세스를 정지 시킬 경우

   kill -9 [pid]

입력하여 하나씩 정지 시켜야 한다.

프로세스명을 이용하여 정지 시킬 경우 pkill 명령어를 사용한다.

이 경우에는 같은 프로세스명을 사용하는 프로세스가 모두 정지된다.

같은 이름의 프로세스가 많이 동작될 경우 이 방법을 사용하면 편하게 정리할 수 있다.

   pkill [프로세스명(CMD)]

프로세스명은 "ps -ef" 명령어를 통해서 나오는 CMD 부분의 명칭을 입력하면 된다.

실행 파일의 경우 예를 들어 "./a.out" 일 경우

   pkill a.out

이라고 입력하면 ./a.out 이라는 명칭의 프로세스들이 모두 정지된다.

2016년 3월 20일 일요일

RPi를 고정 ip 주소로 설정하기(No use GUI)

RPi 보드에 Raspbian을 올려서 처음 동작하게 되면 IP 주소가 자동으로 설정되어 동작하게 되어 있다.

자신이 사용해야 하는 환경에 따라서나 보드의 IP 주소가 고정되어야 하는 경우라면

이 글이 도움이 되기를 바라며 (나도 좀 까먹거나 헷갈리지 않도록) 설정하는 방법을 소개한다.

GUI 환경에서 설정이 아닌 파일을 조작하여 설정하는 것이기 때문에 GUI 환경이 궁금하다면 다른 것을 참고하기를.

우선 나의 환경은 이렇게 되어 있다.


하나의 공유기를 통해서 작업 PC와 RPi 보드가 연결되어 사용하는 환경이다.

RPi 보드에 Raspbain 올리는 동작은 생략하고, Raspbain을 SD 카드에 쓰고 처음 동작시키는 설정으로 설명한다.

우선은 공유기를 제어하는 웹 페이지에 접속한다. 이 부분은 각자의 공유기가 다르니까

자세한 설명은 생략하고, 여유분의 모니터가 있다면 과감히 넘어가도록 하자.
(모니터에 연결해서 IP 주소를 설정하면 된다.)


raspberrypi 라는 이름으로 IP 주소가 할당되어 있는 것을 확인할 수 있다.

나는 PuTTY를 사용하여 RPi 보드로 접속한다. 각자의 방법으로 RPi 보드로 접속하자.

RPi 보드에 처음으로 접속한 경우 ID와 Password는 RPi 공식 홈페이지에서 확인하도록 하자.
("LOGGING INTO YOUR RASPBERRY PI"부분을 참고하자.)

처음 접속을 하고 자신의 홈 디렉터리에서 vi를 통해서 파일을 수정하여 IP 주소를 설정한다.

우리가 수정할 파일은 '/etc/network/interfaces' 파일이다. 이 파일을 수정하려면 sudo 권한이 필요하다.

    $ sudo vi /etc/network/interfaces

해당 파일을 열어보면 eth0 라는 단어가 보이는데 이 부분이 유선 설정을 의미한다.

    iface eth0 inet manual

manual 이라고 되어 있으면 RPi 보드의 IP 주소가 자동으로 설정되어 동작한다.

    auto eth0
    iface eth0 inet static
        address [설정하고자 하는 ip 주소]
        netmask [사용하는 서브넷 마스크(Subnet mask)]
        gateway [사용하는 게이트웨이]

auto eth0 부분을 삽입하고 manual 부분을 static 이라고 수정한다.

address, netmask, gateway 부분을 자신이 사용하는 환경에 맞게 수정하여 저장해주면 된다.

수정을 마쳤다면 보드를 다시 시작시켜 보자.


보드가 다시 켜지고 수정한 IP 주소로 접속하여 IP 주소를 확인하면 

RPi 보드의 주소가 바뀐 것을 확인할 수 있다. 이것으로 RPi 보드의 IP 주소 변경 완료!

2016년 1월 29일 금요일

RPi(Raspberry Pi B+) I2C

Raspberry Pi 보드에서 I2C를 사용하기 위해서 설정하는 방법.

사용된 보드는 B+ 모델이며 사용하는 커널 버전은 4.1.13+ 이다.



RPi 보드에 설정을 불러온다.

   $ sudo raspi-config


 
RPi 설정에서 9 Adevanced Options 메뉴를 선택한다.



I2C를 사용하기 위해서 A7 I2C 메뉴를 선택한다. 

이후에 나오는 대답들은 모두 Yes 나 Ok 를 선택한다.



모든 대화상자에 대한 대답을 완료한 후에는 Finish를 선택하고 RPi 보드를 reboot 한다.




보드가 다시 시작되면 제대로 적용되었는지 확인한다.

처음에 입력한 명령은 RPi 보드에 디바이스 장치를 검색하는 것으로 i2c 장치 파일이 있는지 확인하는 것이고

lsmod 는 RPi 보드가 사용하는 운영체제에 삽입되어 있는 모듈을 살펴보는 명령어이다.

   $ ls /dev/i2c*

   $ lsmod



i2c 장치 파일과 i2c 관련 모듈이 있다면 설정은 완료되었다.

i2c 소스코드를 작성하기 전에 유틸리티를 하나 설치한다.

   $ sudo apt-get install i2c-tools



유틸리티를 설치한 후에 명령어를 통해 RPi 보드와 연결된 장치의 주소를 확인할 수 있다.

   $ i2cdetect -y 1



이제 RPi 보드와 장치간의 i2c 통신을 할 수 있다.

2015년 6월 25일 목요일

우분투에서 사용할 만한 동영상 플레이어


얼마전(정확히 말하면... 6월 24일 2015년도)부터 노트북과 데스크탑 환경을 모두 Linux 계열로

모두 바꿔 버렸다. (솔직히 Windows를 쓰는건 우리나라에서는 다른 운영체제 쓰는 것이 문제가 많으니)

하지만 요즘에는 그런 문제가 많다고 하더라도 어느정도 해결이 되는 상황이고

나도 Linux를 많이 사용하다가 보니까 그런 문제 해결에도 어느정도 방법을 알게 되어서

Linux 사용에 부담이 없어졌다. 그래서 모든 운영체제를 Linux 계열로 바꿨는데

익숙해져 있던 Windows에 인터페이스 프로그램들을 사용하는데 한계가 있어서

비슷한 프로그램을 찾아야 한다. 오늘 기록할 프로그램은 동영상 플레이어다.

우분투에서 기본으로 제공되는 플레이어는 구리다. -ㅅ-;;;

그리고 쉽게 설치가 가능한 VLC 플레이어는 기본제공되는 플레이어보다 좋지만

여전히 사용하기에는 불편하다. 그래서 찾은 것이 bomi 라는 플레이어다.

설치 방법은 간단한 편에 속하고 자막파일도 알아서 잘 읽어 오더라.

그런데 이게 아직 개발 중이라나? [출처: http://sergeswin.com/1083]

설치 방법은 명령어 4줄로 끝난다.

    sudo apt-add-repository ppa:darklin20/bomi

    sudo apt-get update

    sudo apt-get install bomi

    bomi

사용시 주의사항으로는 동영상 플레이어가 종료되지 않고 트레이로 바뀌는거라

백그라운드에 계속 남아 있다는거 정도? 잘 찾아서 종료하지 않으면

시스템 자원을 잡아먹는 범인이 될 것이다.

2015년 4월 1일 수요일

vmware easy install 없애는 방법


vmware에 ubuntu를 설치하다가 보면 가끔 발생하는 문제가

GUI가 나오지 않고 vmware easy install이 나올 경우가 있다.

이 방법을 해결하기 위해서

$ sudo -s

$ mv /etc/issue.backup /etc/issue

$ mv /etc/rc.local.backup /etc/rc.local

$ mv /opt/vmware-tools-installer/lightdm.conf /etc/init

위의 방법을 다 수행하고

$ reboot

다시 시작을 해주면 GUI 화면을 볼 수 있게 된다.

2015년 3월 5일 목요일

프로그래밍과 영어를 동시에?!?!


인터넷을 보다가 어떤 사람이 비영리로 인터넷 강의를 서비스 한다고 해서 찾아 보았다.

칸 아카데미

근데 재미있던 사실은 마이크로소프트의 빌 게이츠가 재단을 설립해 주었다고 한다.

이유는 자신의 아이들이 이 강의를 보고 공부를 하고 있었고 그걸보고 해주었다고 한다.


근데 이 인터넷 강의에서는 여러 가지 과목이 있는데 그중에 컴퓨터에 관한 과목도 있다.

근데 강사들이 외국사람이기도 하고 다양한 국가에 서비스를 하기 때문에

기본적인 영상의 언어는 영어로 되어 있다. 하지만 걱정은 없을 정도로 자막이 잘 나온다.

영어와 프로그래밍의 기본적인 공부를 하기 위해서 활용하면 좋을 것 같다.

2014년 10월 27일 월요일

역 어셈블(disassemble)을 시도해본다


예전에 공부했던 자료들 중에서 어셈블과 소스코드의 주소와 어셈블 명령을

참조해야 되는 자료가 있는데 자료를 본지 너무 오래 되서 기억도 잘 안나고

그때는 어떻게 했는지 기억도 안나고 그래서 좀 찾다가 보니까 괜찮아 보이는 자료를

찾아서 정리 좀 하려고 합니다.


역 어셈블을 하기 위해서 사용되는 방법은 바로 'objdump' 유틸리티 입니다.


Ubuntu 에서는 objdump는 기본으로 사용할 수 있게 되어 있습니다.

그리고 옵션이 생각보다는 꽤 있죠. 자세하게 알아보시려면 objdump 옵션을 검색해서

찾아 보시면 됩니다. 우리가 사용하는 역 어셈블은 -d 옵션을 사용합니다.

-D 옵션도 역 어셈블을 하는데 전체를 다하기 때문에 소스코드가 긴 경우에는

너무 많이 출력되기 때문에 알아보기 힘들수가 있습니다. 그래서 -d 옵션을 사용하는 것을

추천 드립니다. 그럼 어떻게 사용하는 보겠습니다.


소스 코드는 되게 간단한 Hello World 프로그램을 사용하겠습니다. 자 그럼 이제

소스 코드를 컴파일하고 역 어셈블을 시도해보겠습니다.


컴파일을 할 때는 gcc를 사용합니다. 그리고 두 개의 옵션을 주었습니다.

    -c : 링크 파일만 생성 [파일명.o]

    -g : 디버그 옵션

두 개의 옵션만 주면 역 어셈블을 수행할 수 있습니다.

자 그럼 objdump로 수행해보겠습니다.


    objdump -d [링크파일명]

이렇게 입력을 하면 역 어셈블 내용이 화면에 출력 됩니다.

왼쪽에 있는 부분은 주소와 관련된 부분이고 오른쪽 부분은 어셈블 내용입니다.

그런데 이렇게만 보면 이해하기 어려우니까 옵션을 하나 더 줘보겠습니다.


위와 동일하지만 -S 옵션을 하나 더 주었습니다. (S는 대문자입니다.)

        objdump -d -S [링크파일명]

이렇게 하면 어셈블이 나오면서 해당 코드도 같이 표시 되기 때문에

이해하기가 약간은 쉬워집니다. 하지만 저는 여기서 문제가 하나 발생했습니다.

그건 바로! 제가 하는 것은 인텔 계열 프로그램을 역 어셈블 하는 것이 아니고

ARM 계열 소스코드를 역 어셈블 해야 된다는 것이죠.

그래서 저는 방법을 찾으려고 했습니다. 하지만 쉬운 문제는 아니었죠.

하지만 구글신은 여러 가지 방법을 알려주더라고요. 그래서 저는 방법을 찾았습니다.

우선 이것을 하기 위해서는 무언가를 하나 설치해야 됩니다.

$ wget http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/downloads/arm-none-eabi.tar.bz2
--2012-08-16 18:26:29--  http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/downloads/arm-none-eabi.tar.bz2
Resolving www.cl.cam.ac.uk (www.cl.cam.ac.uk)... 128.232.0.20, 2001:630:212:267::80:14
Connecting to www.cl.cam.ac.uk (www.cl.cam.ac.uk)|128.232.0.20|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 32108070 (31M) [application/x-bzip2]
Saving to: `arm-none-eabi.tar.bz2'

100%[======================================>] 32,108,070   668K/s   in 67s

2012-08-16 18:27:39 (467 KB/s) - `arm-none-eabi.tar.bz2' saved [32108070/32108070]

$ tar xjvf arm-none-eabi.tar.bz2
arm-2008q3/arm-none-eabi/
arm-2008q3/arm-none-eabi/lib/
arm-2008q3/arm-none-eabi/lib/libsupc++.a
arm-2008q3/arm-none-eabi/lib/libcs3arm.a
...
arm-2008q3/share/doc/arm-arm-none-eabi/info/gprof.info
arm-2008q3/share/doc/arm-arm-none-eabi/info/cppinternals.info
arm-2008q3/share/doc/arm-arm-none-eabi/LICENSE.txt

위와 같이 입력을 해줍니다.

그럼 arm-non-eabi tool chain을 설치하는 것인데요.

raspberry pi 의 tool chain 이니까 없어지지는 않겠죠. 압축을 풀고나서 'arm-2008q3/arm-none-eabi/bin'

위치로 들어가보면 'objdump'가 있을 겁니다.


그럼 PATH 설정하는건 귀찮으니까 적당히 복사해서 사용해 보죠.

적당한 위치에 복사한 objdump에 같은 옵션을 주고 모듈 프로그램의 링크 파일을 역 어셈블 합니다.


그럼 이제 위와 같이 ARM으로 컴파일된 모듈도 역어셈블을 할 수가 있게됩니다.

참 쉽죠잉?

궁금한게 더 있으시다면 덧글이나 메일로 문의를 주세요.

아는대로 답변을 해드리겠습니다. 그럼 오늘은 끝~!