리눅스2011. 8. 17. 14:21
출처: http://www.novell.com/support/search.do?cmd=displayKC&sliceId=SAL_Public&externalId=3907838
 

JBD: barrier-based sync failed on mmcblkxxx -diabling barriers

JBD = 저널링 블록 디바이스
이 메세지를 끌라면, barrier=off 라는 매게변수를 커널에 넘겨주면 된다. GRUB의 경우에는 /boot/grub/menu.lst에 넣으면 되겠다.  이렇게 하면 커널은 transaction barrier 메카니즘을 사용하지 않게된다.

기본적으로 리눅스 커널은 transaction barrier를 사용하는데, 이는 데이터의 보전성을 유지하기 위한 부가적인 메카니즘이다.
많은 저장 서브시스템은 data의 write 퍼포먼스를 높이기 위해 캐시나 쓰는 order를 변경하는데, 이는 저널링 파일 시스템안에서 관리되는 저널된 데이터에겐 좋지 않다.  저널링은 실제 데이터가 쓰여지기 전에 메타데이터를 씀으로서 크래시 리커버리를 구현한다.  위의 에러(?) 메세지는 그러한 transaction barrier를 지원하지 않는다는 소리이며, 전혀 해로울것은 없지만, barrier는 일반적으로 퍼포먼스를 높여준다.

Posted by code cat
리눅스2011. 8. 2. 20:39
dd if=/dev/zero of=ext4.img bs=1MB count=20  // 20mb 짜리 ext4.img라는 파일을 생성

mke2fs -T ext4 ext4.img  //ext4 타입으로 ext4.img를 포맷


mkdir test //테스트용 디렉토리 생성(마운트 포인트로 이용)

mount -t ext4 -o loop ext4.img test/   //마운트

마운트가 성공됬으면(mount 커맨드로 확인), 테스트로 파일을 막 써보자.
cd test
touch TEMPFILE
mkdir BABO
...

파일이 제대로 생성됐는지 확인해보고, 언마운트를 해보자
cd ..  //test 폴더 안에서 언마운트 할라면 device busy라고 불평한다.
umount /dev/loop0  //꼭 loop0이라는 보장은 없고 아마 마운트시 available한 loop이 잡히는 걸로 안다.
                             //이 부분은 losetup으로 체크할 수 있는 걸로 안다.
cd test/
ls -al 로 확인하면 텅 빈 걸 확인할 수 있다.

다시 마운트 해보자.
mount -t ext4 -o loop ext4.img test/ 
ls -al
해보면 아까 테스트로 막 만든 파일들이 보인다.

자 그럼 이걸 가지고 뭐에 써먹냐 ?  ext4.img 자체를 파티션에 그대로 구울 경우, ext4파일 시스템을 가진 루트파일 시스템 등을 구축 할 수 있는 것이다.  EXT4f라고 썼지만 다른 파일 시스템도 이렇게 해서 굽는게 가능하다.  물론 안드로이드용 파일 시스템을 만들 땐 이걸 안 썼다. 언제 저 짓해서 맨날 구워줄 수 있단 말인가?  다른 방법에 대해서는 다음 기회에~
Posted by code cat

dd if=/dev/zero of=ext3.image bs=1MB count=1024

포맷에 따라서 파일을 복사하거나 변환시킴(주로 빈 파일 만들거나, loopback 디바이스 만들 때 사이즈 할당 시켜서 파일 만들 때 씀)

if=FILE
표준 입력 대신 파일로부터 읽어들인 파일
of=FILE
표준아웃으로 대신 파일로 씀
bs=BYTES
          ibs랑 obs를 BYTES로 강제 설정
count=BLOCKS
BLOCKS 만큼의 입력 블록을 복사함.

더 많은 정보는 http://linux.die.net/man/1/dd

 

'리눅스 > 스크립트/유틸' 카테고리의 다른 글

우분투 사용자 추가  (0) 2012.02.24
tar: time stamp s in the future  (0) 2011.08.26
tee 커맨드  (0) 2011.06.19
엔디안 처리하는 함수  (0) 2011.06.06
busybox cross-compile  (0) 2011.06.01
Posted by code cat
리눅스/커널2011. 7. 31. 15:07

툴체인 설치 하고 커널 컴파일 준비 끝!

'리눅스 > 커널' 카테고리의 다른 글

GCC, typeof  (0) 2012.02.23
Documentation/arm/booting  (0) 2011.09.25
커널선점  (0) 2011.05.01
커널 스레드  (0) 2011.05.01
커널 초기화  (0) 2011.04.20
Posted by code cat
프로그래밍2011. 7. 8. 14:16

출처:http://redstack.net/blog/2008/01/16/x86-calling-conventions/

x86 calling conventions

This is the first article of a (I hope) long series of articles about ‘The Basics: What everyone should know about’ :)

The calling convention defines the way a function or a piece of code should arrange data before calling a function, and what to do after. It responds to questions like “In which order should I pass the arguments ?”“Should I clean something ?”“Where is the result ?”, …

There is a lot of different calling conventions. Here are the 3 I see the most of the time:

  • cdecl
  • stdcall
  • fastcall

cdecl convention

The cdecl convention is the default one used when working with a C compiler like GCC or MSVC. To use the cdecl scheme for a function, you can use this syntax (GCC):

__attribute__((cdecl)) int function(int arg1, int arg2, ...);

GCC will produce the following code when calling a cdecl function with 4 arguments :

push   0x4 ; arg4
push   0x3 ; arg3
push   0x2 ; arg2
push   0x1 ; arg1
call   _cdecl_fct
add    esp,0x10
mov    DWORD PTR [ebp-0x4],eax

As you can see, arguments are pushed into the stack in right to left order, and it’s up to the caller to remove the arguments from the stack (Here this is done by add esp, 0x10). The result of the function is stored in the EAX register.

stdcall convention

The stdcall convention is the one used by Win32 APIs. It’s also the easyest to use when writing ASM code, in my opinion. A function can be declared as a stdcall function in C with this syntax (GCC):

__attribute__((stdcall)) int function(int arg1, int arg2, ...);

GCC will produce the following code when calling a stdcall function with 4 arguments :

push   0x4 ; arg4
push   0x3 ; arg3
push   0x2 ; arg2
push   0x1 ; arg1
call   _stdcall_fct@16
mov    DWORD PTR [ebp-0x4],eax

As for the cdecl calling style, arguments are pushed from right to left, but in stdcall mode, the caller doesn’t have to clean the arguments from the stack after calling the function. A stdcallfunction removes arguments from the stack before returning. This is done by using the ret n instruction most of the time.
Like for cdecl, result is in EAX.

fastcall convention

The fastcall convention is not standardized, but we will watch the way GCC and MSVC handle it. A function can be declared as afastcall function in C with this syntax (GCC):

__attribute__((fastcall)) int function(int arg1, int arg2, ...);

GCC will produce the following code when calling a stdcall function with 4 arguments :

push   0x4 ; arg4
push   0x3 ; arg3
mov    edx,0x2 ; arg2
mov    ecx,0x1 ; arg1
call   @fastcall_fct@16
mov    DWORD PTR [ebp-0x4],eax

As you can see, not all the arguments are pushed into the stack. The first two arguments are passed via the ECX, for the first argument, and EDX, for the second argument. The remaining arguments are pushed into the stack from right to left. The called function has to pop the arguments from the stack before returning, like for stdcall.
The result is, as usual, in EAX :)


Posted by code cat