Install couchdb for Ubuntu 12.04

Posted in 개인/ㄴLinux by

Install couchdb for Ubuntu 12.04

$ sudo add-apt-repository ppa:couchdb/stable

$ sudo apt-get update

$ sudo apt-get install couchdb


Install couchdb for Ubuntu 12.04

http://smilejay.com/2013/11/easy_install-mporterror-entry-point-console_scripts-easy_install-not-found/

OSI - Chapter 01

Posted in 개인/ㄴOSI by

1.1 기본 구성요소

컴퓨터 구성요소는 다음과 같이 4가지로 구성된다.

  • 처리기(processor): 컴퓨터의 동작을 제어하고 데이터를 처리, 일반적으로 중앙처리장치(CPU)라고 부른다.
  • 주기억장치(main memory): 데이터와 프로그램을 저장, 휘발성(volatile)이다.
  • 입출력 모듈(I/O module): 컴퓨터와 외부 장치 간의 데이터 이동을 담당한다.
  • 시스템 버스(system bus): 처리기, 주기억장치, 그리고 입출력 모듈 간의 통신을 제공한다.

Figure1.1은 상위 수준의 구성요소를 보여준다. 처리기의 기능 중 하나는 메모리와 데이터를 교환하는 것이다. 이 때 MAR과 MBR, 두 개의 내부 레지스터를 이용한다.

  • 메모리 주소 레지스터(MAR:Memory Address Register): 다음에 읽거나 기록할 메모리의 주소를 명시하는 레지스터
  • 메모리 버퍼 레지스터(MBR:Memory Buffer Register): 메모리에 기록되거나 읽힐 데이터를 저장하고 있는 레지스터
  • 입출력 버퍼 레지스터(I/OBR: I/O Buffer Register): 입출력 모듈과 처리기 간의 데이터 교환을 위해 사용
  • 프로그램 카운터(PC): 다음에 수행할 명령어의 주소를 저장한다.
  • 명령어 레지스터(IR): 현재 수행 중인 명령어를 저장한다.

주기억장치는 주소으로 이루어진 집합이다. 각 주소에는 이진수의 값이 저장되어 있는데 이는 명령어 또는 데이터로 해석될 수 있다. 입출력 모듈은 처리기와 주기억장치로 데이터를 전송하거나, 그 역방향으로 데이터를 전송한다. 데이터가 전달될 때까지 일시적으로 데이터를 보관하는 내부 버퍼를 가지고 있다.


1.2 처리기 레지스터

처리기는 일련의 레지스터를 가지고 있으며, 이들은 두 가지 기능을 제공한다.

  • 사용자가 볼 수 있는 레지스터: 레지스터 사용의 최적화를 통해 주기억장치의 참조를 최소화 할 수 있게 한다. IA32에서는 EAX, EBX... ARM에서는 R0, R1... 같은 레지스터 집합
  • 제어 및 상태 레지스터: 처리기가 자신의 동작을 제어하거나 특권(privileged) 운영체제 루틴들이 프로그램의 수행을 제어하기 위해 사용한다. ARM의 CPSR와 같은 레지스터

사용자가 볼 수 있는 레지스터

이 레지스터는 처리기가 수행하는 기계어를 통해 참조할 수 있으며, 시스템 프로그램뿐만 아니라 응용 프로그램까지 모든 프로그램에서 시용할 수 있다. 레지스터의 유형으로 데이터, 주소, 조건 코드 레지스터 등이 있다.

  • 데이터 레지스터: 본질적으로 범용이며, 데이터에 대한 연산을 수행하는 기계어 명령어에 사용된다.
  • 주소 레지스터: 주기억장치 주소를 저장하고 있거나, 주소를 계산하기 위해 사용되는 주소의 일부를 저장한다.
    • 인덱스 레지스터: 인덱스를 이용한 주소지정은 기준값에 인덱스를 더하여 실제 주소를 계산하는 일반적인 주소지정 형태이다.
    • 세그먼트 포인터: 세그먼트를 이용한 주소지정인 경우, [세그먼트: 메모리는 워드로 구성된 가변적인 길이의 블록들]로 나누어진다. 메모리 참조는 특정 세그먼트 지정과 지정된 세그먼트 내에서의 오프셋을 통해 이루어진다.
    • 스택 포인터: 스택 사용방식에 따라 상단 혹은 하단을 가리키는 레지스터가 있다.

제어 및 상태 레지스터

모든 처리기는 상태 정보를 저장하기 위해 흔히 프로그램 상태 워드(PSW: Program Status Word)라고 불리는 레지스터를 포함하도록 설계된다. PSW는 조건 코드(또는 플래그)뿐만 아니라 인터럽트 가능/불능 비트와 커널/사용자 모드 비트와 같은 상태 정보도 포함한다.


1.3 명령어 수행

프로그램은 처리기에 의해 수행되며, 메모리에 저장된 명령어들의 집합으로 구성된다. 명령어 처리는 간단하게, 메모리로부터 한 번에 하나의 명령어를 읽고(fetch) 명령어를 수행(execution)하는 두 단계로 구성된다. 프로그램 수행은 명령어 반입과 명령어 실행의 반복으로 이루어진다.


명령어 반입과 수행

각 명령어 사이클이 시작될 때, 처리기는 메모리로부터 명령어를 가져온다. 일반적으로 프로그램 카운터(PC)는 다음에 가져올 명령어의 주소를 가지고 있다. 별도의 명령이 없는 한, 처리기는 각 명령어를 반입한 후 항상 PC를 증가시켜 다음 명령어가 순서대로 반입하게 한다.

반입된 명령어는 처리기 내의 명령어 레지스터(IR: Instruction Register)로 적재된다. 명령어의 비트들은 처리기가 행해야 할 작업을 명시한다. 처리기는 명령어를 해석하고 요구된 작업을 수행한다. 일반적으로 이러한 작업은 다음 4가지 범주로 분류될 수 있다.

  • 처리기-메모리: 데이터는 처리기로부터 메모리로, 또는 반대로 전송될 수 있다.
  • 처리기-입출력: 처리기와 입출력 모듈 간의 전송을 통해 주변장치로 데이터를 송수신 할 수 있다.
  • 데이터 처리: 처리기는 데이터에 대해 산술 또는 논리 연산을 수행할 수 있다.
  • 제어: 명령어는 수행 순서 변경을 명시할 수 있다.

Figure 1.4는 프로그램의 수행의 일부를 설명하고 있는데, 메모리와 처리기 레지스터 중 관련된 부분을 보여주고 있다.


입출력 기능

데이터는 입출력 모듈(디스크 컨트롤러 등)과 처리기 간에 직접 교환될 수 있다. 메모리의 주소를 지정함으로써 메모리 읽기와 쓰기를 할 수 있듯이, 입출력 모듈을 대상으로 데이터를 읽고 쓸 수 있다.

입출력 모듈 간의 통신 지연시간으로 인해 발생하는 처리기의 대기시간 및 작업 부담을 덜어주기 위해, 메모리와의 입출력 교환이 직접 이루어지게 하는 것이 바람직하다. 이 경우 처리기는 입출력 모듈에 대해 메모리 읽기나 쓰기 권한을 부여함으로써, 처리기를 개입시키지 않고 입출력-메모리 간 전송이 이루어지게 할 수 있다. 이러한 전공 과정에서, 입출력 모듈은 메모리에 대한 읽기 또는 쓰기 명령을 수행하게 되고, 결과적으로 처리기는 데이터 교환의 책임에서 벗어나게 된다. 이 연산을 직접 메모리 접근(DMA: Direct Memory Access)라 한다.


1.4 인터럽트

OSI - Chapter 00

Posted in 개인/ㄴOSI by

시작하기에 앞서...

William Stallings의 운영체제 내부구조 및 설계 원리(제6판)의 책을 공부하려고 한다. 단순히 책을 읽어나가는 것보다 정리하며 학습하면 오래 기억될 것 같아 공부한 내용들을 포스팅해 나갈 것이다. 끝까지 할 수 있을진 모르겠지만...



Windows7 Ubuntu UEFI방식으로 멀티부팅 설정

Posted in 개인/ㄴLinux by

LG zd360-GK60k를 구매하고 나서 듀얼부팅을 위해 windows7과 ubuntu를 파티션을 각각 나누어 설치하였다. 윈도우를 설치하고, ubuntu를 설치하면 grub로 들어가야 하는데 자동으로 윈도우 부팅만 되는 것이었다. 리눅스 mbr섹터를 복사하기 위해 라이브 우분투모드로 들어가 리눅스 파티션의 512k섹터를 읽어오고 이것을 bcdedit을 사용하여 ubuntu항목을 등록했지만, 부팅하면 커서만 깜빡이는 현상이 발생했다. 알고보니 바이오스가 UEFI방식으로 바뀌면서 이것에 맞게끔 설정을 해줘야 멀티부팅이 가능하다.


## 설정 순서
0. 바이오스 설정 advanced - UEFI Boot : Enabled, Legacy OS Boot : Disabled
1. Ubuntu USB로  Ubuntu 설치(Ubuntu12.04 LTS 지우고 다시 설치 항목 선택)
2. 그러면 UEFI방식으로 드라이버 잡고 gpt테이블로 구성해놓음
3. 다시 Ubuntu USB로 부팅하여 기타항목으로 들어가서 efi영역을 두고 ext4, swap 파티션을 삭제 후 재구성(이 때 사용할 용량으로 설정)
4. 재구성한 ext4파티션에 Ubuntu 재설치, 부트위치는 현재 하디드스크(sdaX가 아닌 sda)
5. Windows7 USB(UEFI방식)으로 생성 - fat32방식으로 해줘야 한다.(그러므로 xDark같은 이미지 파일은 사용할 수 없음)
6. UEFI Windows7 생성 방법은 아래 블로그 참조
7. Windows7 USB로 부팅하여 마지막 파티션에 윈도우를 설치해주자

UEFI방식의 USB로 윈도우를 먼저 설치한 후 우분투를 설치해도 상관없다.


## UEFI 방식으로 USB 디스크 생성
http://sungliky.blogspot.kr/2012/10/ubuntu-thinkpad-e320-1298-rk9-7-1.html


## XCopy 매개변수가 틀립니다 오류 시
xcopy f: h: /s /e     ->      xcopy f:* h: /s /e
위와 같은 식으로 *을 붙여서 해결하였다.


## Ubuntu USB 설치
http://deviantcj.tistory.com/473


## 윈도우 관리자를 이용한 듀얼부팅 설정
http://forlov3u.blog.me/20150375155


## 윈도우7 시스템 예약파티션 제거
http://snoopybox.co.kr/902
http://coolpunch.tistory.com/288



UART Arrow Key Code

Posted in 개인/ㄴFROMA by

http://www.termsys.demon.co.uk/vtansi.htm

http://electronics.stackexchange.com/questions/8874/is-it-possible-to-send-characters-through-serial-to-go-up-a-line-on-the-console


Use VT100 escape codes to control the cursor.

Eg.

puts("\033[2J");   // clear screen
puts("\033[0;0H"); // set cursor to 0,0
puts("\033[10B");  // move cursor down 10 lines
puts("\033[5A");  // move cursor up 5 lines


vim vundle 플러그인 및 환경설정

Posted in 개인/ㄴLinux by

## vim-pathogen ##
Reference: https://github.com/tpope/vim-pathogen

mkdir -p ~/.vim/autoload ~/.vim/bundle; \
curl -Sso ~/.vim/autoload/pathogen.vim \
    https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim

Add this to your vimrc:

execute pathogen#infect()


## Vundle ##
Reference: http://kldp.org/node/125263
                https://github.com/gmarik/vundle

1. Setup Vundle:

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

2. Configure bundles:

    Sample .vimrc:

 set nocompatible               " be iMproved
 filetype off                   " required!

 set rtp+=~/.vim/bundle/vundle/
 call vundle#rc()

 " let Vundle manage Vundle
 " required! 
 Bundle 'gmarik/vundle'

 " My Bundles here:
 "
 " original repos on github
 Bundle 'tpope/vim-fugitive'
 Bundle 'Lokaltog/vim-easymotion'
 Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
 Bundle 'tpope/vim-rails.git'
 " vim-scripts repos
 Bundle 'L9'
 Bundle 'FuzzyFinder'
 " non github repos
 Bundle 'git://git.wincent.com/command-t.git'
 " git repos on your local machine (ie. when working on your own plugin)
 Bundle 'file:///Users/gmarik/path/to/plugin'
 " ...

 filetype plugin indent on     " required!
 "
 " Brief help
 " :BundleList          - list configured bundles
 " :BundleInstall(!)    - install(update) bundles
 " :BundleSearch(!) foo - search(or refresh cache first) for foo
 " :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles
 "
 " see :h vundle for more details or wiki for FAQ
 " NOTE: comments after Bundle command are not allowed..

Source-Explorer-srcexpl.vim -> SrcExpl 변경
trinity.vim -> Trinity 변경


## ctags 자동검색 ##
Reference: http://kldp.org/node/115739

set tags=./tags;/


## cscope 자동검색 ##
Reference: http://vim.wikia.com/wiki/Autoloading_Cscope_Database

function! LoadCscope()
  let db = findfile("cscope.out", ".;")
  if (!empty(db))
    let path = strpart(db, 0, match(db, "/cscope.out$"))
    set nocscopeverbose " suppress 'duplicate connection' error
    exe "cs add " . db . " " . path
    set cscopeverbose
  endif
endfunction
au BufEnter /* call LoadCscope()


## cscope 명령어 ##
Reference: http://kldp.org/node/115739

:cs find c 함수명 => 함수를 호출하는 곳을 찾을 때
:cs find g 함수명 => 함수가 정의된 곳을 찾을 때
:cs find s 함수명 => 함수명과 일치하는 심볼을 모두 찾아낼 때
:cs find d 함수명 => 지정된 함수가 그 안에서 부르는 함수 찾기
:cs find e 정규표현식 => 정규표현식 패턴으로 찾기
:cs find f 파일명 => 파일 찾기
:cs find i 헤더파일 => 헤더파일 찾기

vim용 키맵 플러그인: http://cscope.sourceforge.net/cscope_maps.vim


## 현재 사용중인 .vimrc ##


"-----------------------------------------------------------------------"
" Vundle 환경설정
"-----------------------------------------------------------------------"
set nocompatible               " be iMproved
filetype off                   " required!

	set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

	" let Vundle manage Vundle
	" required! 
	Bundle 'gmarik/vundle'

	" My Bundles here:
	Bundle 'The-NERD-tree'
	Bundle 'The-NERD-Commenter'
	"Bundle 'Source-Explorer-srcexpl.vim'
	Bundle 'SrcExpl'
	Bundle 'cscope.vim'
	Bundle 'taglist-plus'
	"Bundle 'trinity.vim'
	Bundle 'Trinity'

	" original repos on github
	Bundle 'tpope/vim-fugitive'
	Bundle 'Lokaltog/vim-easymotion'
	Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
	Bundle 'tpope/vim-rails.git'
	" vim-scripts repos
	Bundle 'L9'
	Bundle 'FuzzyFinder'
	" non github repos
	Bundle 'git://git.wincent.com/command-t.git'
	" ...

	filetype plugin indent on     " required!
	"
	" Brief help
	" :BundleList          - list configured bundles
	" :BundleInstall(!)    - install(update) bundles
	" :BundleSearch(!) foo - search(or refresh cache first) for foo
	" :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles
	"
	" see :h vundle for more details or wiki for FAQ
	" NOTE: comments after Bundle command are not allowed..

"-----------------------------------------------------------------------"
"vim 환경설정
"-----------------------------------------------------------------------"
	scripte utf-8
	" vim:set fenc=utf-8 tw=0:
	" Vim setting for sirini

	" Vim 전용 기능 사용
	set nocp

	" 옵션 복원
	set all&

	" 명령어 기록 갯수
	set hi=100

	" 백스페이스 사용
	set bs=indent,eol,start

	" 인코딩 설정
	"let &tenc=&enc
	"set enc=utf-8
	set fenc=utf-8
	set fencs=utf-8,cp949,cp932,euc-jp,shift-jis,big5,ucs-2le,latin1

	" 커서 위치 항상 보이기
	set ru

	" 완성중인 명령을 표시
	set sc

	" 줄번호 표시
	set nu

	" 줄 번호 표시 너비 설정
	set nuw=5

	" 탭 크기 설정
	set ts=2
	set sw=2

	" 탭 >> 공백 변환 사용안함
	set noet
	set sts=0

	" 자동 줄바꿈 안함
	set nowrap

	" 자동 들여쓰기
	set autoindent

	" C프로그래밍 자동 들여쓰기
	set cindent

	" magic 기능 사용
	set magic

	" 이동 동작시 줄의 시작으로 자동 이동
	set sol

	" 비쥬얼 모드 동작 설정
	set sel=exclusive

	" 괄호짝 찾기에서 <> 도 찾도록 추가
	set mps+=<:>

	" 새로 추가된 괄호 짝 보여주기
	"set sm

	" 검색어 강조
	set hls

	" 검색시 파일 끝에서 되돌리기 안함
	set nows

	" 검색시 대소문자 구별 안함
	set ic

	" 스마트한 대소문자 구별 기능 사용
	set scs

	" 항상 status 라인을 표시
	set ls=2

	" 커스텀 확장자들에게 파일 형식 설정
	"au BufRead,BufNewFile *.dic setl ft=php

	"파일 형식에 따른 신택스 하이라이팅 켜기
	sy enable

"-----------------------------------------------------------------------"
" ctags database path 설정 
"-----------------------------------------------------------------------"
	set tag=./tags;/

"-----------------------------------------------------------------------"
" cscope database path 설정 
"-----------------------------------------------------------------------"
	function! LoadCscope()
		let db = findfile("cscope.out", ".;")
		if (!empty(db))
			let path = strpart(db, 0, match(db, "/cscope.out$"))
			set nocscopeverbose " suppress 'duplicate connection' error
			exe "cs add " . db . " " . path
			set cscopeverbose
		endif
	endfunction
	au BufEnter /* call LoadCscope()

"-----------------------------------------------------------------------"
" Tag List 환경설정 
"-----------------------------------------------------------------------"
	filetype on				" vim filetype on
	nmap  :TlistToggle			" F7 key = Tag List Toggle
	let Tlist_Ctags_Cmd = "/usr/bin/ctags"	" ctags 프로그램 위치
	let Tlist_Inc_Winwidth = 0		" window width change off
	let Tlist_Exit_OnlyWindow = 0		" tag/file 선택 완료 시 taglist
						" window close = off
	let Tlist_Auto_Open = 0			" vim 시작 시 window open
	let Tlist_Use_Right_Window = 1		" vim 시작 시 window open

"-----------------------------------------------------------------------"
" Source Explorer 환경설정
"-----------------------------------------------------------------------"
	nmap  :SrcExplToggle			" F8 key = SrcExpl TOggle
	nmap  h					" 왼쪽 창으로 이동
	nmap  j					" 하단(preview) 창으로 이동
	nmap  k					" 상단 창으로 이동
	nmap  l					" 오른쪽 창으로 이동

	let g:SrcExpl_winHeight = 8		" SrcExpl 윈도우 높이 지정
	let g:SrcExpl_refreshTime = 100		" refreshing time = 100ms
	let g:SrcExpl_jumpKey = ""		" 해당 definition으로 jump
	let g:SrcExpl_gobackKey = ""		" back
	let g:SrcExpl_isUpdateTags = 0		" tag file update = off

"-----------------------------------------------------------------------"
" NERD Tree 환경설정
"-----------------------------------------------------------------------"
	let NERDTreeWinPos = "left"		" NERD Tree위치 = 왼쪽
	nmap  :NERDTreeToggle			" F9 Key = NERD Tree Toggle

"-----------------------------------------------------------------------"
" Runtime Path Manipulation
"-----------------------------------------------------------------------"
	execute pathogen#infect()


FROMA UART Debug Code

Posted in 개인/ㄴFROMA by

FROMA 개발 시 디버깅 목적을 위한 코드

## ASM : 특정 문자열 출력 ##

UART_SEND:
  ldr   r1,=0x48020014  // UART3 LSR
  ldr   r2,[r1]
  and   r2,r2,#0x20
  cmp   r2,#0x00
  beq   UART_SEND
  ldr   r1,=0x48020000
  mov   r2,#0x61    //r3
  str   r2,[r1]


## C : 특정 문자열 출력 ##

while((((*(volatile unsigned int *)(0x48020014))&0x20)>>5)==0);
(*(volatile unsigned int *)(0x48020000)) = 0x61;


## C : 입력한 키 값을 +1하여 반환 ##

#define REG32(addr) (*(volatile unsigned int *)(addr))

unsigned int reg=0x00;

while(1){
  while(REG32(0x48020014)&0x01==0);
  reg = REG32(0x48020000);
  
  if(reg>0){
    while((REG32(0x48020014)&0x20)>>5)==0);
    REG32(0x48020000) = reg + 1;
}


U-boot Reference URL

Posted in 개인/ㄴOS by

## U-boot 관련 ###

U-boot Doc

http://www.denx.de/wiki/DULG/Manual


u-boot 분석 참고자료 IAMROOT

http://www.iamroot.org/xe/Kernel_9_ARM/78389


[펌][S5PV210] Booting Sequence of S5PV210( S5PV210의 부팅 순서 )

http://myje.tistory.com/entry/%ED%8E%8CS5PV210-Booting-Sequence-of-S5PV210-S5PV210%EC%9D%98-%EB%B6%80%ED%8C%85-%EC%88%9C%EC%84%9C


U-Boot 분석(1)~(5)

http://blog.naver.com/idrukawa/100054094629


U-boot (Universal Boot Loader, #1)

http://flylhs83.tistory.com/entry/U-boot-Universal-Boot-Loader-1


부트로더 동작원리 분석

http://embedded.dankook.ac.kr/~baeksj/course/2009_Project2/LN_2_Bootloader.pdf


[Uboot] u-boot.lds 파일 분석 -이솝사이트 펌- 

http://blog.naver.com/rainofsoul81/130109949043



## 리눅스 부팅 관련 ###

리눅스 부팅 프로세스 연구 2

http://blog.naver.com/dicecorp/73064579


리눅스 SMP부팅 

http://blog.naver.com/snowgoddess/106184187


## Pandaboard 관련 ###

Pandaboard Omap Bootloader Project

http://www.omappedia.com/wiki/Bootloader_Project


u boot와 x loader의 관계

http://sol2man2diary.wordpress.com/2012/11/21/u-boot%EC%99%80-x-loader%EC%9D%98-%EA%B4%80%EA%B3%84/


U-Boot SPL framework becomes generic

http://www.emlinews.net/2012/10/u-boot-spl-framework-becomes-generic/


Virtualbox Ubuntu에서 adb devices 안잡힐 때

Posted in 개인/ㄴAndroid by

Virtualbox는 USB 2.0를 사용하기 위해선 Virtualbox Extension Pack을 설치해줘야한다.


https://www.virtualbox.org/wiki/Downloads

위 사이트에서 Oracle VM VirtualBox Extension Pack을 다운받는다.

Virtualbox 관리자를 실행시키고 파일-환경설정-확장에서 패키지 추가를 통해 다운받은 파일을 추가해준다.

그리고 해당 가상머신에서 설정-USB-USB 2.0 EHCI 컨트롤러 사용하기를 선택한 후 사용할 USB장치를 추가시켜주면 된다.