구)홈페이지 오탈자 보기
IT EXPERT, 리눅스 커널 프로그래밍

 

페이지오탈자 내용등록일
131

(31 page , 73 page)

/etc/apt/sources.list의 소스 리스트를 다음과 같이 변경합니다.

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.us.debian.org/debian/ squeeze main contrib non-free


예제 소스에 전체 실습 환경이 VMware 이미지로 등록되어 있습니다.

2011-11-283
131

(31page,73page)

/etc/apt/sources.list를 다음과 수정했음에도 

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.us.debian.org/debian/ squeeze main contrib non-free

다음과 같은 에러가 발생한다면 네트워크 연결이 안 되는 것입니다. 

E: Unable to parse package file /var/lib/apt/lists/ftp.us.debian.org_debian_dist s_squeeze_main_binary-i386_Packages(1)
E: The package lists or status file could not be parsed or opened.

VMware의 네트워크 설정을 확인해보기 바랍니다. 또한, http://www.hanb.co.kr/exam/1460/debian_6_install/에서
http://www.hanb.co.kr/exam/1460/debian_6_install/Debian%206%2064-bit(brtfs).7z로 된 VMware 이미지를 압축 해제하고 VMware에서 실행해서 업데이트 여부를 확인해보기 바랍니다.

2011-11-293
181

((p 81) 소스 5번재줄)

echo -ne '1033[11,0]'

============>

echo -ne '33[11,0]'

2007-03-151
182

(4번째줄)

수정전

apt-get install gcc


수정후

apt-get install gcc-3.3

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50


설명

집필 당시에는 데비안 안정판의 공식 버전이 3.1이었으며, 2007년 8월에 데비안 안정판의 공식 버전이 4.0으로 변경되었습니다. apt-get install gcc 명령으로 설치할 경우 기존에는 gcc 3.3.5 버전이 설치되었으나 현재는 gcc 4.x 버전이 설치되며 커널 컴파일이 제대로 되지 않습니다. 따라서, 데비안에서 gcc 3.3.5를 기본 컴파일러로 설정하기 위해 위와 같은 절차를 수행합니다.

2007-09-101
188

(p88 첫번째 문단 둘째줄)

슬라이스로 파티션과 비슷하다고 생각하면 큰 문제는 없습니다.  

->  

슬라이스도 파티션과 비슷하다고 생각하면 큰 문제는 없습니다.

2007-01-081
293

((p93) 두번째 문단 첫째줄)

http://www.kernel.org/pub/lin/kernel/v2.4/  

-> 

http://www.kernel.org/pub/linux/kernel/v2.4/

2007-01-081
2107

(p 107 이어지는 menu.lst 파일의 내용)

GRUB 부트 로더 설정 편집에서 구문 강조 위치 수정

2007-01-101
2123

()

"레드햇9 9번 CD에서"

->

"레드햇9 3번 CD에서"

2007-01-251
2126

((p 126) 첫번째 문단 넷째줄)

이 함수의 이름은 shcedule()입니다.

-> 

이 함수의 이름은 schedule()입니다.

2007-01-081
2135

()

"taglist 창에서 태그의 종류를 나타내는 struct, union, struct에서는 +/- 키로 ..."



"taglist 창에서 태그의 종류를 나타내는 struct, union, function에서는 +/- 키로 ..."

2007-01-251
2143

(세 번째 문단 셋째 줄)

은하계를 여행하는
==>
은하수를 여행하는 

2009-08-272
3167

(네 번째 문단 둘째 줄)

인터럽스 ==> 인터럽트

2009-08-272
3167

((p. 167 10번째 줄))

32비트 환경에서 IDT의 한 엔트리의 크기는 8바이트 입니다. 따라서 256개의 인터럽트 처리 함수를 등록하기 위해서는 256 * 8 바이트를 사용합니다.

2007-04-101
3170

(P.170 마지막 문단 첫째 줄, P180 둘째 줄)

divide_zero()
->
divide_error()

2008-04-132
3170

([표 3-2])

인터럽트 번호 1, 2에 종류가 '트랩 게이트'
트랩 게이트 -> 인터럽트 게이트 

2009-02-052
3175

([그림 3-10])

movl2, %eax
==>
movl 2, %eax

call*sys_call_table(,%eax,4)
==>
call *sys_call_table(,%eax,4)

syscall_exit;
==>
syscall_exit: 

2009-08-272
3178

([그림 3-11])


││n│
==>
│n│ 

2009-08-272
3185

(185p)

커널 2.6.19 이상을 사용할 경우 newcall_test.c가 컴파일되지 않음.

상위 커널 버전에서 시스템 호출 매크로 _syscall0 ~ _syscall6 매크로 함수가 삭제되었고, sys/syscall.h 헤더 파일이 추가되고, syscall() 매크로 함수로 통일되었음.

newcall_test.c를 상위 커널에 맞게 수정하면 다음과 같음.

#include <linux/unistd.h>
#include <sys/syscall.h>

int main(void)
{
  int i;
  printf( "[App Message] Start n" );
  i = syscall(__NR_newcall );
  printf( "[App Message] i = %dn", i );
  return 0;
}

2007-11-301
3190

()

ewcall_test.c



newcall_test.c

로 변경

2007-01-281
3192

(192p, 왼쪽 사이드바)

newcall.c

->

블록 데이터를 교환하는 시스템 호출: newcall.c

2007-11-301
3193

()

p193의 소스 코드에서 첫번째 printf의 After를 Before로 변경.


  printf( "[App Message] After: a = %3d, b = %3d, c = %3dn",
      data.a, data.b, data.c );
  newcall( &data );
  printf( "[App Message] After: a = %3d, b = %3d, c = %3dn",
      data.a, data.b, data.c );



  printf( "[App Message] Before: a = %3d, b = %3d, c = %3dn",
      data.a, data.b, data.c );
  newcall( &data );
  printf( "[App Message] After: a = %3d, b = %3d, c = %3dn",
      data.a, data.b, data.c );

2007-01-281
3193

(193p)

왼쪽 사이드바 수정

블록 데이터를 교환하는 시스템 호출: newcall.c

->

블록 데이터를 교환하는 시스템 호출 테스트 프로그램: newcall_test.c

2007-10-231
3194

((p 194))

프로그램 실행 결과에서 첫번째 After를 Before로 수정.

[App Message] After: a =   9, b =   2, c =   0
[App Message] After: a =  11, b =   7, c =   1



[App Message] Before: a =   9, b =   2, c =   0
[App Message] After: a =  11, b =   7, c =   1

로 수정.

2007-01-281
3201

(p.201 두번째문단 두째줄)

##name은 전달된 인자로 치환하는 기능을 수행합니다.

->

##name은 전달된 name 인자의 변수명을 문자로 치환하여
'##'이전의 문자열과 연결해주는 기능을 수행합니다.

2007-02-051
3210

((p. 210) 왼쪽 '여기서 잠깐' 의 둘째줄)

SYSCALL/SYSEXIT

->

SYSENTER/SYSEXIT

2007-01-031
4224

((p 224) 첫번째 문단 다섯번째줄)

"data 섹션은 코드에서 사용하는 정적인 데이터, bss 섹션은 스택을 위해 사용된다고 했습니다."

==>

"data 섹션은 코드에서 사용하는 초기화된 데이터, bss 섹션은 static 또는 초기화되지 않은 데이터를 위해 사용된다고 했습니다"

2006-12-311
4232

(마지막 줄)

VERSION_CODE -> LINUX_VERSION_CODE 

2009-02-052
4235

(마지막 줄)

심볼과 관련된 매크로는 include/linux/module.h에 정의되어 있으면
-> 
심볼과 관련된 매크로는 include/linux/module.h에 정의되어 있으며

2009-02-052
4243

((p.243) 아래서 3번째줄)

 module_init(init_caller);
module_exit(exit_caller);

==>

module_init(init_param);
module_exit(exit_param); 

2007-01-211
4246

((p.246) 표4-4)

 char*     s           2.6
char*     charp     2.6
char*     string     2.6

char*에 대해서는 "s"를 사용했지만, 2.6커널에서는 "charp"와 "string"를 사용할 수 있습니다. 2.4에서는 "s"만 가능합니다. 

=====================>

char*     s           2.4?
char*     charp     2.6
char*     string     2.6 

2007-01-211
4265

((p265) 첫번째 문단 둘째줄)

ANSI C에서 %x나 %x는 정수형을...

-> 

ANSI C에서 %x나 %X는 정수형을...

2007-04-011
5308

((p 308) 여섯번째 문단 셋째줄)

__GFP_WAIT와 같이 프로세스를 전환할수 없다는 의미는

=======>

__GFP_HIGH와 같이 프로세스를 전환할수 없다는 의미는

2007-02-061
5314

((p 314) 마지막줄)

http://lxr.inux.no

=======>

http://lxr.linux.no

2007-02-061
5314

((p 314) 마지막 문단 마지막줄)

http://lxr.inux.no/

->

http://lxr.linux.no/

2007-01-101
5316

(그림 5-9)

이미지의 화살표 수정

2007-01-291
5322

(하단 마지막 코드)

#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type),(nr),size)) 
-> 
#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type),(nr),(size))

(size) 괄호 추가

2009-02-052
5326

(p326 마지막 코드단락 ~ 327 첫번째 코드단락)

if( _IOC_DIR( cmd ) & _IOC_READ ){
  err = access_ok( VERIFY_READ, ...
  ...
else if( _IOC_DIR( cmd ) & _IOC_WRITE ){
  err = access_ok( VERIFY_WRITE, ...
  ...

->

if( _IOC_DIR( cmd ) & _IOC_READ ){
  err = access_ok( VERIFY_WRITE, ...
  ...
else if( _IOC_DIR( cmd ) & _IOC_WRITE ){
  err = access_ok( VERIFY_READ, ...
  ...

2007-01-291
5337

(p337 2번째 소스 6번째 줄)

틀린부분

dev_t dev 
  ∧----------- 디바이스 번호

-------------------------

dev_t dev 
       ∧------- 디바이스 번호

2007-04-121
5348

((p 348 마지막줄))

구조체가 할당된 메모리공간을 할당합니다.

->

구조체가 할당된 메모리공간을 해제합니다.

2007-02-121
5369

((p 369 다섯번재 문단 첫째줄)

static void __exit fini(void) {

====>

static void __exit md5_exit( void ) {

2007-02-131
5383

((p.383) 5번째항목 Blowfish)

'블록 암호화 알고리즘은'  

==>

'블록 암호화 알고리즘인'

2007-01-031
6391

(/proc/irq 설명 부분)

시스템에서 제공하는 인터럽트에 대한 정보 
-> 
시스템에서 제공하는 irq에 대한 정보

2009-02-122
6391

(/proc/slabinfo 의 설명부분에서)

슬랩 할당이기의 통계 정보 
-> 
슬랩 할당기의 통계 정보

2009-02-122
6407

(p407)

상단의 코드 설명 부분에서 마지막 return offset-page; 에 대한 설명선이 누락되었습니다.

2009-02-122
7465

(p465. 하단부터 10번째 줄에서)

그 이후에는 DMA를 더욱 개선해서 강력한 DMA(Ultra DMA)를 뜻하는 UDMA라는 약자를 씁니다. 
->
그 이후에는 DMA를 더욱 개선해서 강력한 DMA(Ultra DMA)를 뜻하는 UDMA가 등장했습니다.

2009-02-142
8514

((514 페이지, 밑에서 세 번째 줄))

16비트 CPU지만 데이터를 주고 받는 통로는 20비트였습니다.

->

16비트 CPU지만 주소를 주고 받는 통로는 20비트였습니다.

2007-04-191
8545

((545P 그림 8-9 프로세스 주소공간 맨 아래 사각형))

Tex -> Text

2007-04-191
8552

((552 페이지, 밑에서 4번째 줄))

염러 -> 염려

2007-04-191
8564

((564 페이지, 10번째 줄))

page_address()는 page 구조체의 점수를 받아서
->
page_address()는 page 구조체의 주소를 받아서

2007-04-191
8570

()

X86 프로세서에서 인터럽트 금지 명령어는 sti입니다.  (sti -> cli로 변경)
...

인터럽트를 다시 사용할 수 있게 하는 명령언 cli이며, 이를 인라인 어셈블리로 정의한 cli() API를 제공합니다. local_irq_restore()도 cli()를 호출해서 인터럽트를 다시 허용합니다.

(cli -> sti 로 변경)

2007-01-241
10870

((870 페이지, 밑에서 8번째 줄))

디스크에 저장된 파일의 크기가 늘어나는 경우에는 새로운 아이노드의 할당, 줄어드는 경우에는 아이노드 제거
->
디스크에 저장된 파일의 크기가 변경되거나 속성을 변경하는 경우, 아이노드 정보가 변경되는 경우, 

2007-04-211