글

우분투(리눅스) 커널 컴파일 방법(과정)

예전에 작성해뒀던 자료가 생각이나 이곳에 복사합니다. ------------------------------------------------------- # kernel compile basic solution     1. Download kernel source from  http://www.kernel.org     2. decompress file     3. input command  $ cd linux-[version]     4. $ make menuconfig     5. $ make     6. $ make modules_install     7. $ make install     8. chang directory to /boot     9. $ mkinitramfs -o initrd.img-[version] [version]     10. $ update-grub   or   edit grub ( $ gedit /boot/grub/menu.lst )     11. reboot your system     최근 이용되는 방법 가운데 리눅스 커널을 컴파일 하기 위한 가장 기본적인 과정입니다. 위에 기술된 과정 가운데 일부는 현재 이용하는 배포판의 종류에 따라 이용 불가능한 부분도 있을것입니다. (위의 것은 우분투 기준입니다.) 그리고 작업 환경의 차이에 따라 error 나는 경우도 발생할 수 있습니다. 그러나 error를 해결하기 위한 솔루션을 찾는 과정에서 얻어지는 것이 많을 것이라 믿기에 자세히 기록하지 않았습니다. 아무런 문제 없이 성공하시는 ...

우분투 12.10 업데이트 후 발생하는 와이파이 문제 해결 방법

우분투(ubuntu) 12.10 버전을 새로 설치 후 눈에 띄는 성능 향상에 즐거워하며 업데이트를 하였는데 무선랜(와이파이 - wifi)이 동작을 하지 않는다. 인터넷에서 검색해보니 나만의 문제가 아닌 브로드컴(broadcom) 계열 무선 랜카드를 이용하는 다수에게서 발견되는 것이었다. 해결 방법은 아래와 같이 간단하다.  1. 우선 네트워크에 접속할 필요가 있으니 유선 랜 케이블을 연결하든지, 아니면 현재 올려져 있는 와이파이 드라이버를 내리고 테더링을 이용하든지 해야 한다.  # sudo apt-get remove bcmwl-kernel-source      : 와이파이 드라이버 제거 방법  # sudo reboot                                                               : 재부팅 와이파이 드라이버를 제거하면 불안정하기는 하지만 매우 근거리에 있는 신호는 인식한다. 스마트폰 테더링을 이용하든지 공유기 근처로 가든지 해서 일단은 네트워크에 접속해야 한다. 2. 네트워크에 접속했다면 아래의 명령들을 입력한다.  # sudo apt-get install linux-headers-generic  # sudo apt-get install  bcmwl-kernel-source  # reboot 재부팅을 해보면 와이파이가 제대로 동작하는 것을 확인할 수 있을 것이다. 참고로 현재 사용하고 있는 무선 랜카드 종류에 따라 결과가 다를 수도 있으며, 본인의 랜카드는  BCM4313 이다. ( lspci...

페도라(Fedora) 또는 CentOS에서 rpm 패키지 설치시 의존성 문제 해결하기

rpm도 그렇고 deb도 그렇고 실제 시스템에 설치하기 위해서는 의존성 문제에 부딫히게 된다. 이러한 문제를 해결해주고 좀 더 편리함을 위해 yum 이나 apt-get을 제공해주지만 해당 저장소에서 지원해주지 않는 패키지의 설치시에는 이용이 불가하다.   이럴땐 rpm 또는 dpkg 명령어를 이용해 설치하게 되는데 거의 대부분 의존성 문제에 걸리게 된다. 이때 의존성 문제를 해결하기 위한 방법을 설명한다.   방법에는 크게 두가지가 있다. rpmdb를 이용하는 방법과 yum을 이용하는 방법.   rpm을 이용하는 이유가 yum 저장소에서 제공해주지 않는 패키지를 설치하기 위한것인데 yum을 이용하라는 것에 의문을 가질 수 있을 것이다. yum은 온라인 저장소에서 패키지를 가져와 설치하는 기능 외에 rpm 패키지를 설치할 때 의존성을 자동으로 해결해주는 기능도 함께 제공한다. 이용 방법은 아래와 같다. # yum localinstall XXXXX.rpm   리눅스용 네이트온을 예로 들어 설명하자면, nateon을 설치하기 위해서는 kde와 관련한 라이브러리들을 설치해줘야 한다. 이때 위의 방법을 이용하면 편리하게 설치가 가능하다.   하지만 한가지 문제가 더 발생할 수 있다. 그것은 패키지 서명에 관한 것인데, 관련 정보가 기입되어 있지 않을 경우에는 불안전 요소로 인식하여 설치를 거부할 수 있다. 이때 표시되는 메시지는 다음과같다. Package nateon-1.1.0-301.i386.rpm is not signed   이 문제는 한가지 옵션의 기입만으로 간단하게 해결이 가능하다. 다음과 같이 이용하면 된다. # yum localinstall --nogpgcheck XXXXX.rpm   이제 의존성 문제를 쉽게 해결할 수 있을 것이다.

Fedora, CentOS에서 이용되는 yum을 위한 자동완성 사용하기

 우분투는 다른 배포판들과 비교했을때 철저히 일반 사용자들을 고려하여 만들어졌다고 할 수 있다. 때문에 다른 것들과 비교해 편리하게 이용할 수 있는 몇몇 기능들이 있는데 터미널을 이용한 패키지 설치시 이용할 수 있는 자동완성 기능도 그 중에 하나다.  우분투 사용자들은 터미널 상에서 패키지를 설치할 때 흔히 'apt-get install' 을 이용하게 되는데, 패키지의 완전한 이름을 모르더라도 탭(tab) 키를 이용하면 자동완성부터 유사 목록을 출력하여 손쉽게 패키지명을 완성할 수 있다. 하지만 다른 배포판에서는 이것을 기본적으로 제공하지 않는다.  본 글에서는 'yum install'을 이용할 때 탭키를 이용해 자동완성하는 기능을 이용하는 방법을 설명한다. (참조한 링크:  http://www.if-not-true-then-false.com/2011/yum-autocomplete-on-fedora-centos-red-hat-rhel/ ) Step 1. root 권한 획득  $ su root Step 2. bash-completion을 설치한다.  # yum install bash-completion Step 3. 현재 이용중인 터미널을 닫고 새로운 터미널을 연다. Step 4. 자동완성 기능을 이용한다.  # yum inst[탭키][탭키]  # yum install fire[탭키][탭키]  이제 yum을 이용할때 자동완성 기능을 이용할 수 있다. 방법 참 간단하다.

Java의 volatile 키워드에 대한 이해

아래의 내용은 블로그  http://tomowind.egloos.com/4571673  에서 가저온 것입니다. =============================================================================== volatile이란 단어의 뜻은 "변덕스러운"이다. 다시 말하자면 "자주 변할 수 있다"로 생각할 수 있다.  프로그래밍 언어에서는 정의 는 언어와 버전마다 다르지만, 대충은 "자주 변할 수 있는 놈이니 있는 그대로 잘 가져다써"정도로 생각을 하면 되겠다. 조금 더 엄밀히 정의를 하자면, (1) 특정 최적화에 주의해라, (2) 멀티 쓰레드 환경에서 주의해라, 정도의 의미를 준다고 보면 된다. Java에서는 어떤 의미를 가질까? volatile을 사용한 것과 하지 않은것의 차이는 뭘까? volatile의 버전마다의 차이는 뭘까? synchronization과 volatile의 차이는 뭘까? 이 의문들에 대해서 정리한 것은 다음과 같다. volatile을 사용하지 않은 변수 : 마구 최적화가 될 수 있다. 재배치(reordering)이 될 수있고, 실행중 값이 캐쉬에 있을 수 있다. volatile을 사용한 변수 (1.5미만) : 그 변수 자체에 대해서는 최신의 값이 읽히거나 쓰여진다. volatile을 사용한 변수 (1.5이상) : 변수 접근까지에 대해 모든 변수들의 상황이 업데이트 되고, 변수가 업데이트된다. synchronziation을 사용한 연산 : synch블락 전까지의 모든 연산이 업데이트 되고, synch안의 연산이 업데이트된다. 무슨 말인지 전혀 모를 수 있다. 앞으로 예제를 들면서 이해를 시켜보도록 노력하겠다. 첫 예제는  Jeremy의 블로그 에서 가져온다. 나는 위의 4가지의 경우를 완전히 정립하지 못한 상태에서 봐서 이 예제의 설명이 모호했다고 느꼈다. 블로그의 설명을 보고 내 설명을 보면 이해가 더 될...

우분투(리눅스)에서 이클립스를 이용한 안드로이드 개발시 단말기 인식 문제 해결 방법

안드로이드 어플리케이션을 계발하기 위해서 에뮬레이터를 이용하는 방법이 있지만 좀 더 쾌적한 환경에서 테스트하기 위해 실제 단말기를 많이 이용한다. 하지만 우분투(리눅스) 환경에서 단말기를 연결할 경우 몇몇 특정 모델 또는 특정 경우에 단말기를 인식하기 못하는 문제가 발생할 수 있다. 이럴때는 대부분 단말기의 시리얼 정보레 "???????" 등으로 표기된다. 이러한 문제를 해결하기 위한 방법을 간단히 설명한다. 우선 리눅스 환경에서 안드로이드를 정상적으로 계발하기 위해서는 SDK 에서 제공하는  adb를 정상적으로 접근이 가능해야 한다. 이는 이클립스가 스스로 adb가 저장된 위치로 찾아가야 한다는 것인데 PATH를 설정하여 해결가능하다. 터미널을 열고 1. sudo -s 2. vi /etc/profile 3. 맨 아래에 export PATH=$PATH:(SDK위치)/platform-tools 기입하고 저장     (예. /home/XXX/android-sdk-linux/platform-tools) 4. source /etc/profile 위의 과정을 정상적으로 마치면 터미널에서 adb 를 실행하였을때 옵션에 대한 설명을 볼 수 있게 된다. 이 상태에서 이클립스를 실행한 후 임의의 프로젝트를 생성하여 실행해본다. 아직까지도 단말기가 정상적으로 인식되지 않는다면 터미널을 연 후 아래의 과정을 따른다. 1. sudo -s 2. adb kill-server 3. adb devices 위의 과정으로 마치면 터미널 상에서 단말기에 대한 정보를 확인할 수 있을 것이다. 이제 이클립스에서 정상적으로 단말기를 이용한 실행이 가능할 것이다.

재미삼아 만들어본 Double Linked List (이중 연결 리스트)

역시 이론으로 알고있는 것과 실제로 경험해보는 것은 큰 차이가 있다는 것을 실감. 구현하는 것은 어렵지 않았으나, 사소한 것 하나하나에 대한 궁금증이 태어남. 대표적인 것이 "Double pointer(다중 포인터)를 왜 사용하는가?"의 질문. 이에 대한 답은 지역변수의 특징과 관련이 있다는 것을 파악. 지역변수는 함수가 리턴하는 순간 함수와 함께 사라진다는 특징이 있음. 함수에 전달하는 매개변수가 포인터라 하더라도 결국은 지역변수와 비슷한 성격을 보임. 포인터 매개변수는 주소를 전달받아 그것을 가리키는 포인터로 이용한다는 특징이 있을뿐 이외에 것은 일반 변수와 같음. 잡설을 그만두고 코드를 까보자. 코드는 리스트와 테스트로 구분되있다. <이중 연결 리스트> -- list.h -- #define true 1 #define false -1 typedef struct _node { int data; struct _node* prev; struct _node* next; } node; typedef struct d_linked_list { node* head; node* tail; int count; int sorted; } d_linked_list; void del_list(d_linked_list* _list); void ins_data(int _data, d_linked_list** _list); node* search_data(int _data, d_linked_list* _list); int del_data(int _data, d_linked_list* _list); void show_all(d_linked_list* _list); -- list.c -- #include #include #include "list.h" void init_list(int _data, d_linked_list** _list) { ...