눅스 커널 컴파일 방법에 대한 메모

 

OS : CentOS 6.3

Kernel 버전 : 2.6.32-279.19.1.el6.i686 -> 2.9.39 로 업데이트

 

 

1. 일단 커널 컴파일시, 메뉴를 화면에 뿌려주기 위한 ncurses-devel를 설치한다.

 - yum install ncurses-devel

 

 

 

2. 컴파일 하고 싶은 커널 버전 다운로드 (http://www.kernel.org/pub/linux/kernel)

 - 경로 : /usr/src (경로는 자기가 원하는 곳으로 설정하면 된다)

 - wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.gz

 

 

 

 

3. 압축을 풀고, 링크 설정을 한다. (사실 안해도 상관은 없다.)

- tar xvfz linux-2.6.39.tar.gz

- ln -s linux-2.6.39 linux

 

 

 

 

4. 커널 컴파일 하기 전, 커널에 대한 설정을 한다.

 - cd /usr/src/linux

 - make mrproper
 - make clean
 - cp /boot/config-`uname -r` ./.config
 - make menuconfig

 

 

 

 

  - Load and Alternaate Configuration File로 들어가서 .config 입력 후 OK 버튼

 

 

 

 - General setup 선택

 - enable deprecated sysfs features to support old userspace tools (NEW) 에서 "y" 키로 선택

 

 

 

 - Local Version 선택

 - 커널 뒤에 붙을 이름 입력 (-release를 붙혔다면 2.6.36-release로 생성 됨)

 

 

 

  - Save and Alternaate Configuration File로 들어가서 .config 입력 후 OK 버튼

 

 

 

 

5. 커널을 빌드한다.

 - make all

 - make modules_install

 - make install

 

 

6. 부팅 시, Load할 커널을 설정한다.

 - vi /boot/grub/menu.lst

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sde
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.39release)
        root (hd0,0)
        kernel /vmlinuz-2.6.39release ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=ko_KR.eucKR rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto rd_LVM_LV=VolGroup/    lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.39release.img
title CentOS (2.6.32-279.19.1.el6.i686)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-279.19.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=ko_KR.eucKR rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto rd_LVM_L    V=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-279.19.1.el6.i686.img
title CentOS (2.6.32-279.el6.i686)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-279.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=ko_KR.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto rd_LVM_LV=Vol    Group/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-279.el6.i686.img

 

 

 

 


 

 

 

 

Posted by Programist
,

vi 편집기 설정 방법

Linux 2014. 11. 29. 19:02

Linux에서 가장 기본이 되는 편집기인 vi에 대한 설정 방법에 대하여 설명한다.

사실 vi 보다는 vim이 더 많은 기능과 설정을 제공하기 때문에

vim을 설정해주고 vi를 alias하는 방법을 사용한다.

vim에서의 옵션은 웹에 찾아보면 알겠지만 실제로 어마어마하다 ;;;

간단히 색상과 줄번호 정도의 설정을 통해서 설정 방법을 설명한다.

 

 

처음 만나는 vi 편집기는 이렇게 투박하다.

 

 

1. vi ~/.vimrc로 편집 (없으면 생성) 

 

 

 

2. vi ~/.bashrc (vi를 사용하면 vim이 열리도록 alias 설정함.) 

 

3. 변경된 bashrc를 적용하기 위하여 /bin/bash 실행

 

4. 적용 후 화면 

 

 

 

맨 처음에도 소개했다시피, vim의 설정 옵션은 엄청 많다.

vim에 대한 메뉴얼을 찾아보고 입맛에 맞는 편집기를 설정하여 사용하면 되겠다.

 

Posted by Programist
,

간혹 root 비밀번호를 잊어버렸을 때 고생하는 경우가 있다.

 

1. 부팅 화면이 뜰 때 Enter를 눌러 부팅 선택 메뉴로 들어간다.

 - 부팅하고자 하는 커널 버전을 선택하고 'e'키를 누른다.

 

 

 

2. 'e'키를 눌렀을때의 화변 전환

 - kernel이 있는 라인을 선택하여 'e'키를 눌러 Edit 모드로 들어간다.

 

 

 

3. Edit 모드에서 kernel의 가장 끝 quiet 뒤에 '1' 또는 'single'을 입력하고 Enter를 누른다.

 

 

 

4. Edit하기 전의 모드로 다시 돌아오게 되는데 'b'를 눌러 부팅을 한다.

 

 

 

 

5. passwd 명령어로 비밀번호를 다시 정정한다.

 

Posted by Programist
,

v응용 프로그램
ü시스템에 준비된 함수나 프로그램 자체적으로 선언된 함수를 이용해 특정 기능을 수행하도록
구현한 프로그램
.
ü리눅스에서 동작하는 응용프로그램은 하드웨어에 직접 접근 불가

-> 디바이스 파일이라는 특수 파일을 이용

v디바이스 파일
ü커널 내의 파일 시스템 구조에 의해 하드웨어를 제어하는 디바이스 드라이버 함수와 연결.

-> 따라서 응용프로그램은 하드웨어를 제어하기 위해, 저수준 파일 입출력함수를 사용하여,
디바이스 파일에 데이터를 쓰거나 읽고, 그 결과로 하드웨어를 제어하는 디바이스 드라이버 함수가 호출되어 동작.
 

 

 

 



v
노드번호는 장치 종류, 주번호 (Major Number), 부번호(Minor Number)로 구성
ü장치 종류 : 장치의 종류를 표현
ü주번호 : 커널에서 디바이스 드라이버 선택시 사용
ü부번호 : 디바이스 드라이버가 디바이스 선택시 사용
 
v디바이스 파일 생성 : mknod 명령어
ümknod device_file [b|c] major_num minor_num

 



v문자 디바이스 드라이버

ü파일 오퍼레이션 : 문자 디바이스 드라이버와 응용 프로그램을 연결하는 고리.
ü응용 프로그램이 저수준 파일 입출력함수를 사용하여, 디바이스 파일에 접근하면,
커널은 등록된 fops 참고하여, 대응하는 커널 함수를 호출함.
ü문자 드라이버 등록 및 제거
§등록

               int XXX_init()

{

  fops.open = XXX_open;
  fops.release = XXX_release;
  fops.write = XXX_write;
  fops.read = XXX_read;
  regster_chrdev(unsigned int major, const char *name, struct file_operations *fops);

}

§제거

               int XXX_exit()

{

  unregister_chrdev(unsigned int major, const char *name);

}


 

 

 




 

Posted by Programist
,

v리눅스 커널 모듈

ü명령에 의하여 리눅스커널에 적재하거나 제거할 수 있는 실행가능한 프로그램
v모듈 프로그램
ü커널의 일부 기능을 커널에서 가져와서 모듈로 구현
ü기능이 필요할 때만 메모리에 적재

 

 

 



v
모듈 소스 형식 (Kernel Ver. 2.6)
=====================================================
#include <linux/init.h>
#include <linux/module.h>
#incldue <linux/kernel.h>
int xxx_init(){
...
printk("Hello World!\n");
...
}
void xxx_exit(){
...
printk("Good-Bye World!\n");
...
}

module_init( xxx_init );
module_exit( xxx_exit);

MODULE_LICENSE( "GPL" );
=====================================================
여기서 xxx는 모듈프로그램 이름(사용자가 임의로 지정가능)


v
모듈프로그래밍 Makefile 생성 방법
=====================================================
KERNELDIR = /lib/module/$(shell uname -r)/build

obj-m := 소스파일명.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR)  SUBDIRS=$(PWD) modules
clean:
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o
=====================================================

처음에는 "
obj-m := 소스파일명.o" 이부분때문에 object파일을 만들어야 하는 줄 알고,
한참 해맸는데 알고보니 "
소스파일명.c" 소스파일을 가지고, 그냥 make 실행시키면 자동으로
"소스파일명.o" 파일과, "소스파일명.ko" 파일을 만들어준다.
 

v
커널용 출력함수 printk()
ü커널용 출력함수로써 printf()와 유사하다.
ü커널 프로그래밍 디버깅시 유용하게 쓰임.
ü단, printk()함수를 사용할 경우, 화면에 뿌려주는게 아니라 시스템로그에 남게 된다. (dmesg)


 

 

 

v모듈 유틸리티
üinsmod : 모듈을 커널에 적재한다. (insert module)
ürmmod : 커널에서 모듈을 제거한다. (remove module)
ülsmod : 커널에 적재된 모듈 목록을 보여준다 (list module)
üdepmod : 모듈간 의존성 정보를 생성한다. (depend module)
ümodprobe : depmod에 의해 갱신된 모듈을 찾아 적재한다. (module probe)

 

 



Posted by Programist
,

Linux USB 마운트 방법

Linux 2014. 11. 29. 18:34


1. 마운트할 USB장치 파일 확인
  - fdisk -l

 

 

 


2. 해당 USB장치 마운트
  - mount -t vfat /dev/sdb1 /mnt/마운트할 디렉토리명

3. 해당 USB장치 마운트 해제 
  - unmount /mnt/마운트할 디렉토리명

Posted by Programist
,