커널 컴화일을 했다

make -j16 (듀얼 제온 머신 부왘~!!)

모듈도 컴화일 했다

make modules

귀찮아서 스트립(strip)은 안 했다

커널 모듈으 용량을 굉장히 많이 줄이는 스트립 옵션에 관한 아주 좋은 글

http://kernelstudy.tistory.com/?page=18

make modules && make bzImage && make INSTALL_MOD_STRIP=1 modules_install && make INSTALL_MOD_STRIP=1 install

 

모듈을 설치했다

make modules_install

커널 이미지를 설치했다

make install

 

끝났겠지? 라고 생각하고  리부트 했다

머신이 꽥하고 죽었다

 

 

아 맞다 initramfs를 안 만들어줬구나...

다른 디스크로 부팅을 했다

mount 시켜서 dracut으로 initramfs를 만들어줬다

*** 안해도 된다 원래는 자동으로 됭다잉

unmount 시키고 리부트 했다

 

 

어?

여전히 안된다

아니 아예 부트로더 못 읽는거 같은데?????

부트로더가 날라갔나부다

(왜? 어째서???)

 

다시 다른 디스크로 부팅했.....는게 아니라

grub에서 멈춰서 좀 수정했다

root hd(0,0)을 아마도 1번 장치로 인식 되어있길 빌며

root hd(1,0) 수정했다

 

그리고 커널이미지 위치를 root=LABEL=HELLO (커널이미지가 HELLO 파티션에 있었음ㅋㅋㅋ)로 잡아줬다

만약 LABEL링 안했으면 UUID를 외워서 쳤어야할지도 모른다

 

 

일단 기존 커널이미지로 부팅은 잘 된다

날아간 부트로더를 복구 하자

 

 

grub-install /dev/sdb

안된다

왜? 어째서?

 

grub-install --recheck /dev/sdb

님아 뭔가 꼬였어여라고 말을 해주더라

grub에 system map인가 먼가 하는게 있는데

거기서 0번과 1번의 장치 순서가 반대로 되어있었다

반대로 바꿔줬다

 

그리고 다시 grub-install /dev/sdb

님아 이제는 맞나여? 라고 물어보길래 

오키도키로키 해줬다

 

##########위의 과정을 조금 더 자세히######################################

 

live disc를 넣고 부팅했음

그냥 부팅되는 어떤 이미지라도 상관 없을듯

 

grub-install이 있는 /sbin 으로 이동했음

(live cd에는 /sbin에 grub, grub-install이 없으므로 /mnt/sysimage/sbin으로 이동했음)

 

sbin위치에서

./grub-install --root-directory=/mnt/sysimage --recheck /dev/sd?

--root 옵션으로 복구하고자 하는 놈의 root를 마운트 시킨 디렉토리 주소로 바꾸고

--recheck 옵션으로 /dev/sd? 를 리체크 하기로 했음 sd?는 시스템 마다 다름

   fdisk -l로 확인해보면 될듯

 

그리고

./grub-install --root-diretory=/mnt/sysimage /dev/sd?

로 설치하여 복구 완료

live cd에는 sbin에 grub이 없어서 복사해줘야한다 .......................

usb면 모르겠는데 만약 cd면 참으로 골까는 상황이 발생할듯

 

왜 조금 더 자세히 썼냐면 그 사이에 부트로더를 한 번 더 날려먹었따

에헷~☆

 

#####################################################################

 

reboot 그리고 복구를 위해 껴뒀던 다른 디스크는 제거

잘 켜진다

 

우왕ㅋ굳ㅋ

 

 

Question.

부트로더는 왜 산악다이빙 했을까?

Posted by 쵸코케키

보통은 yum install kernel-devel 혹은 yum install kernel-header 등등

yum list | grep kernel 로 뽑아서 대충 설치하면 잘 된다

 

그런데 가끔 안되는 경우가 있으니...

 

/lib/modules/자기리눅스이름(uname -r)/source 혹은 build 파일의 심볼릭 링크 경로를 확인하기 바란다

요 경로를 다시 /usr/src/kernels/리눅스 버전 이런식으로 맞춰주면 오케이

(리눅스 패키지 종류에 따라 정확한 경로는 다를듯)

 

그런데 이게 안되는 골 때리는 경우가 있다

 

분명 다 맞춰줬는데 왜 이러니?

 

 

 

생각해보니까 원래 설치한 페도라에다가 최신버전의 커널패치를 추가로 한지라

yum install kernel-header를 해도 구버전 페도라의 소스만 다운받아서 설치하니 의미가 없던 것이었다

 

이럴 때는 yum-builddep 라는 놈을 사용해야하는 것 같은데 이걸 어케 설치하나 찾아봤더니

yum install yum-utils 더라...

뭐 apt쓰는 분이나 기타 등등은 알아서 ㅋㅋ

 

대충 이름을 보아하니 build에 specific하게 맞춰서 찾아주는듯

혹은 yum install kernel-버전이름 이런식으로 해도 된다고 양키들이 말하는데 앙댄다

 

여튼 yum-builddep kernel-devel 해보니까 뭔가 엄청 깔더니 어........

여전히 module 컴파일이 안되네

EXTRAVERSION을 바꿔서 그런가 음니아럼니아러민아러

 

 

아 컴파일 잘 된당

소스 디렉토리 이름의 규칙을 정확하게 잘 지키니 okay

소스 디렉토리 이름에 EXTRAVERSION이름을 붙이니 컴빠일이 앙대네요

Posted by 쵸코케키

2012. 7. 26. 17:13 devel/man & example

ioctl

ioctl이 뭐하는 녀석이지? 하는 궁금증이 많았는데 친절하고 구체적으로 나와있는글이 거의 없더라

http://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/device-understanding.html

그러다가 위의 링크를 읽어보니 아하~ 하고 깨닫게 되었다

 

int main()
{
int fd; char buf[256];

fd = open("/dev/hdd_info", O_RDWR);
ioctl(fd, 0, buf);

printf("buf : %s\n", buf);
close(fd);
return 0;
}

 

위의 kldp 링크 중에 나와있는 소스코드이다(살짝 수정을 했다 좀...)

open으로 장치 하나 열어서

ioctl로 장치에게 동작 명령 내리고

출력하고 다시 장치 닫는다

 

 

ioctl은 장치에게 그냥 이미 정의되어있는 명령을 내리는(함수를 호출하는) 놈이라는 것을 알게 되었다

대신 장치를 우선 open으로 열고 인자로 그 file descriptor랑 가운데 request number를 넣어서 어떤 함수를 호출할지를 정하는듯

 

그런데 동일한 ioctl을 사용하는데 어떻게 장치마다 각기 다른 function을 호출 할 수 있지?

예를 들면 A파일을 열어서 ioctl에 0req#을 넣어서 하는 행위랑 B파일을 열어서 ioctl에 0req#을 넣어서 하는 행위가 어떻게 다르게 되는거지? (혹은 같게)

 

 

 

미리 device driver에 그런거 등록해놓는듯

 

 

가장 위의 링크를 보니까 struct file_operations에 미리 여러가지 말 그대로 file operation들을 등록할 수 있는데

struct file_operations Fops = {
NULL,
NULL,
hddinfo_read,
NULL,
NULL,
NULL,
hddinfo_ioctl,
NULL,
hddinfo_open,
NULL,
hddinfo_release
};
이런식으로 자기가 쓰고 싶은 놈들을 function 등록 ㅇㅇ

struct니까 멤버 위치당 역할은 고정

위의 코드를 디바이스 드라이버에 작성하고

(Fops와 Fops structure에 포함 등록 되어있는 function들을 정의)

 

insmod한 다음에 이제 유져 프로그램에서 ioctl 하면 그게 인쟈 잘 된다 이런 내용인듯

그렇다면 dd에는 하드웨어 접근 코드들을 넣으면 되겠구나 하는 생각이 들기도 하고

어느정도 권한까지 있으려나

 

여튼 kldp가 짱!짱!

'devel > man & example' 카테고리의 다른 글

arm assembly byte swap 예제 분석  (0) 2016.04.13
dev file  (0) 2015.08.04
const  (0) 2012.07.21
#define function macro  (0) 2012.07.15
#define 문자열 치환 및 합치기  (0) 2012.07.15
Posted by 쵸코케키

2012. 7. 21. 07:13 devel/man & example

const

int test=70;

const int* ptr = &test;

test=30;

 

*ptr = 30 -> x

 

 

 

int* const ptr=&test;

*ptr = 70

 

ptr=&date -> x

'devel > man & example' 카테고리의 다른 글

dev file  (0) 2015.08.04
ioctl  (0) 2012.07.26
#define function macro  (0) 2012.07.15
#define 문자열 치환 및 합치기  (0) 2012.07.15
strstr  (0) 2012.01.28
Posted by 쵸코케키

출처 : 윤성우의 열혈 C 프로그래밍


포인터 배열

int n1=10,n2=20,n3=30, n4=40;

int* ptr[4]

int* ptr[4] = {&n1, &n2 ...};


  

2차원 배열의 포인터

int a2d[2][4] = {1,2,3,4,5,6,7,8};

int (*pptr)[4] = a2d;

int형 변수를 가리키면서 sizeof(int)x4 단위로 증감을 한다

 

pptr[i][j]로 활용

'devel > code' 카테고리의 다른 글

for loop  (0) 2014.03.04
kcompat.h - linux kernel version  (0) 2014.02.26
문자열 배열  (0) 2013.07.06
c에서 linked list 자료형에 관계 없이 접근하기  (0) 2013.01.23
ntohs 같은 byte order 변경 함수  (0) 2012.10.24
Posted by 쵸코케키

2012. 7. 17. 21:35 Volatile

타협거부

 

당신에게는 그런 행위를 할 기회가 제공될 가치가 없습니다

없다고 생각합니다가 아니라

 

없습니다.

 

 

 

'Volatile' 카테고리의 다른 글

산타할아버지를 욕 했더니 뒤에서 부모님이 우신다  (0) 2012.08.31
생각해볼 거리  (0) 2012.08.29
군대 기록  (0) 2012.04.27
이력서에 경력 사항 잘 적는 방법  (0) 2012.02.19
네이버 지도  (0) 2012.02.12
Posted by 쵸코케키

#define SQUARE(X) ((X)*(X))

괄호를 마구 치는 이유

 

-> #define sq(x) (x)*(x) 라고 가정하면

 

int num = 120 / sq(2)

-> 120 / 2 * 2

연산자 우선 순위에 의하여 차례로 들어간다

그런고로 120이 num에 저장된다

 

 

크기가 작은 함수, 그리고 호출의 빈도수가 매우 높은 함수를 macro로 정의하는 것이 좋다고 한다

 

 

출처 : 윤성우의 열혈 C 프로그래밍

 

'devel > man & example' 카테고리의 다른 글

ioctl  (0) 2012.07.26
const  (0) 2012.07.21
#define 문자열 치환 및 합치기  (0) 2012.07.15
strstr  (0) 2012.01.28
arm inline assembly  (0) 2011.12.24
Posted by 쵸코케키

출처 : 윤성우의 열혈강의

Preprocessor 항목 부분

 

책을 친구에게 주려고 필요한 부분은 발췌해서 정리 헤헷

 

 

#include <stdio.h>

#define STRING_JOB(A, B) #A "의 직업은 " #B "입니다."

 

int main()

{

printf("%s, \n", STRING_JOB(으아아아, 떨어진드아아아아));

return 0;

}

 

 

 

# operator 역할

#define STRCAT(ABC) #ABC

STRCAT의 argument ABC를 문자열ABC로 치환한다

 

more tip

문자열은 나란히 선언하면, 하나의 문자열로 간주가 된다.

따라서 다음과 같이 문자열을 선언하는 것도 가능하다.

char* str="ABC" "DEF";

이는 다음과 동일하다

char* str="ABCDEF";

char* str=STRCAT(12) STRCAT(34);

 

 

 

문자열을 잇고 싶습니다

## operator

 

#define CON(UPP, LOW) UPP ## 00 ## LOW

int num = CON(22, 77);

-> 선행처리기에 의하여 컴파일 이전에 다음과 같이 치환된다

 

 

int num = 220077;

data type이 int형임을 유의깊게 보시오

 

 

'devel > man & example' 카테고리의 다른 글

const  (0) 2012.07.21
#define function macro  (0) 2012.07.15
strstr  (0) 2012.01.28
arm inline assembly  (0) 2011.12.24
thread starvation  (0) 2011.12.09
Posted by 쵸코케키

#0. git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

#1. vimrc를 카피한다


vimrc.txt


#2. vim +BundleInstall +qa

(서버가 느린지 시간이 꽤 오래 걸린다)


#3. 적당히 원하는 부분 수정해서 사용하도록 한다

(예를 들면 cscope를 autoload로 바꾸든지 등)

http://vim.wikia.com/wiki/Autoloading_Cscope_Database


#4. cscope 생성 할 때 find . ~~ 으로 하면 안되고

find `pwd` ~~ 로 생성해야 한다

SrcExpl에서 acd 를 사용하는데 그게 cscope와 호환이 잘 되지 않는다

그래서 절대 경로로 cscope 파일을 생성해야 함


기타 - NERDtree가 정상적으로 동작하지 않는 경우가 있다

이럴 때는 NERDtree를 껐다가 켜거나(caching error)

엔터키 대신 o키를 사용하여 파일을 열면 된다(원래는 enter를 쳐도 파일이 열려야 정상)


마우스가 은근 불편한데 toggle로 mouse mode를 켜고 끄도록 하면 편리할듯 싶다


vim 컴파일 할 때 ./configure --prefix /usr --enable-cscope 옵션을 줘야 한다

기존 fedora package 7.3은 /usr/bin에 설치되지만 7.4는 /usr/local/bin이 기본


Bundle로 Solarized 색상표가 오동작 하는 경우가 있다

그냥 이럴 때는 패키지를 삭제하고 직접 색상코드를 vim74/color 디렉토리에 넣고 사용하는게 낫다


vim 쓰다 먹통되면 십중 팔구는 ctrl + q 누르면 풀린다 


환경 설정 중 복잡한 부분 설명

F1 - 함수 폴딩(함수 function{} 에서 {에 대고 F1 누르면 접힌다)

F2 - 접은거 풀기

F3 - 뭐더라 까먹었다 ㅠㅠ

F5 - 선언한 원형으로 이동하기, 가장 많이 쓰일듯 싶다


문서 수정 해야 함 


~/.vimrc


set cindent

set smartindent

set autoindent

set mouse=a

 

set ts=4

set nu

set sw=4

set paste

"set expandtab

"au Bufenter * set et

 

set tags+=/usr/src/kernels/linux-2.6.37/tags

set csprg=/usr/bin/cscope

set csto=0

set cst 

set nocsverb

if filereadable("./cscope.out")

    cs add cscope.out

    cs add /usr/src/kernels/linux-3.12.10/cscope.out

else

    cs add /usr/src/kernels/linux-3.12.10/cscope.out

endif

set csverb

 

set wrap

set nobackup

set visualbell

set hlsearch

hi Comment ctermfg=6 ctermbg=none cterm=none

 

syntax enable 

set bg=dark


"colorscheme torte

"colorscheme ron

"colorscheme zellner

colorscheme peachpuff

"colorscheme solarized

set ruler

 

set bs=2 fo=cqrt ls=2 shm=at ww=<,>,h,l ts=4 sw=4

 

map <F1> v]}zf

map <F2> zo

map <F3> [i

map <F5> gd

map <F6> :tnext^M

map <F7> :tprevious^M

nmap <F8> :SrcExplToggle<CR>

nmap <F11> :TrinityToggleAll<CR>

nmap <F12> :TlistToggle<CR>


"nmap <F9> :NERDTreeToggle<CR>

"let NERDTreeWinPos = "right"

let NERDTreeIgnore = ['\.o$', '\.ko$', 'cscope.*', '\.a$', '\.symvers$']


map <C-n> :NERDTreeToggle<CR>

nmap <C-H> <C-W>h

nmap <C-L> <C-W>l

"nmap <C-J> <C-W>j

"nmap <C-K> <C-W>k


"cscope key map

nmap <c-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>

nmap <c-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>

nmap <c-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>

nmap <c-\>f :cs find f <C-R>=expand("<cword>")<CR><CR>


let Tlist_Ctags_Cmnd = "/usr/bin/ctags"

let Tlist_Inc_Winwidth = 0

let Tlist_Exit_OnlyWindow = 0

let Tlist_Auto_Open = 0

let Tlist_Use_Left_Window = 1



"// Map the keys below to jump from one window to another:

let g:SrcExpl_winHeight = 8

let g:SrcExpl_refreshTime = 100

let g:SrcExpl_isUpdateTags = 0

" // Set “Enter” key to jump into the exact definition context

let g:SrcExpl_jumpKey = "<ENTER>"

" // Set “Space” key for back from the definition context

let g:SrcExpl_gobackKey = "<SPACE>"


set nocompatible

filetype off                   " required!


set rtp+=~/.vim/bundle/vundle/

call vundle#rc()


Bundle 'gmarik/vundle'

Plugin 'The-NERD-tree'

Plugin 'taglist.vim'

Plugin 'c-standard-functions-highlight'

Plugin 'Trinity'

Plugin 'SrcExpl'

Bundle 'git://git.wincent.com/command-t.git'


filetype plugin indent on     " required!



그리고 tab space로 재정렬 :retab

Posted by 쵸코케키

노말을 하면서 이상하게 플레이 하는 경우를 몇 차례 보았습니다

기억에 남는 예시로...

 

 

0. 은신 플레이

초반에 이블린하고 트위치가 동시에 적 정글로 가서 블루도 먹고 적 정글캐도 따고

그러하다...

그 다음 바로 적 레드 위치로 가서 적이 레드 먹으로 오는걸 또 따버림

적 정글캐릭 멘탈 파괴

 

 

1. 라인 빨리 밀기 조합

판테온, 트페, 쉔, 마이, 애쉬

쉔, 마이 스펠에 텔포 넣고 왔다 갔다 하면서 SALHAE

 

성장이 별로 필요 없는 캐릭터들 혹은 초반에 열라 쎈 캐릭터들 혹은 CC기가 있는 캐릭터 3명이 미드로 처음부터 러쉬가서 미드를 빠르게 밀어버림

(쉔, 빵테 등등)

 

탑은 그냥 탑 라인 정상적으로 먹고 봇은...몰라 알아서 해

 

적미드 우선 말리고

적정글도 정글 돌다가 도와주러 오느라 망함(도와주러 오다가 낚여서 죽으면 대박)

 

미드만 일단 쫙 밀면 됨

포인트는 적이 성장하기 전에 자꾸 미드로 와서 도와주다가 죽게 만드는 것

 

물론 노말에서 실력 없는 애들이랑 해야만 통함ㅋㅋ

그리고 1번 처럼 라인을 빨리 밀 수 있고 왔다갔다가 용이한 애들이 많아야 굳

'Game > LOL' 카테고리의 다른 글

lol 고스족 애니 사진 - 패치후 변경된 모습  (1) 2012.12.03
NA Regionals S2 - TSM vs Curse  (0) 2012.09.22
잭스 부왓!  (0) 2012.05.30
LOL 랭겜 배치고사 후기(1400!!!!) + 비법  (0) 2012.05.13
나서스 케넨 탑 라인  (0) 2012.02.26
Posted by 쵸코케키

블로그 이미지
chocokeki
쵸코케키

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.1
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함