본문 바로가기

operation

linux kernel 에서 사용 할 수 있는 file io functions 원칙적으로, linux kernel layer 에서는 file io 를 다루면 안된다. 여러 이유가 있겠지만, 일단 file descriptor list 를 각 task descriptor 에서 관리하고 있고, file을 linux kernel 단에서 접근하게 되면, 어느 process 에서 지금 kernel code 를 실행하는지 일일이 확인해야 하기 때문이다. 또한, 각 process 가 가진 access(read / write) 권한 문제도 발생하게 된다. 하지만, 이를 모두 감수하고라도, 꼭 써야만 하겠다면 다음 함수를 사용하면 된다. 여기에는 간단하게 동작하는 file operation 을 제공한다. open close size read write 더보기
shift 연산자(>>)를 이용한 곱셈과 나눗셈 linux kernel code 를 분석하다 보면 가끔 복잡한 shift 연산자 들이 나옵니다. shift 연산자들은 연산의 속도가 빨라서 고수 개발자들에게 사랑받곤 하지만 분석하는 입장에서는 그 의미가 모호해서 답답할 때가 많습니다. 그중 자주 사용되는 shift 연산자를 이용한 나눗셈을 알아 봅시다. totalpages = mtd->size >> mtd->writesize_shift; 이 구문의 이미는 무었일까요? 보통 mtd 는 수많은 page 들로 이루어져 있습니다. page 는 write단위이기도 해서 writesize 와 동일합니다. writesize = 4096 = (2진수)1000000000000 이렇게 됩니다. shift 연산자는 1 을 얼마나 밀었냐 인데요. 위에서 0 의 갯수를 세면 .. 더보기
커널에서 파일 오퍼레이션 하기(File operation in Kernel) 원문 : http://blog.naver.com/netohk?Redirect=Log&logNo=80045492480 커널에서 파일 오퍼레이션 하기... (드라이버에서 펌웨어 로딩시 유용) #include #ifndef __KERNEL_SYSCALLS__ #define __KERNEL_SYSCALLS__ #endif #incude //#include function() { int fp; mm_segment_t fs; fs = get_fs(); set_fs(KERNEL_DS); open("file", O_RDONLY, 0); size = lseek(fd, 0, 2); //END lseek(fd, 0, 0); //START read(..); close(fp); set_fs(fs); } [출처] 커널에서 파일 .. 더보기