[[TableOfContents]] == Linux Kernel == === Git === Git 서버 설정 및 사용하는 방법에 대한 끄적임. * GitGuideForKernelDevelopment === Development === Reading list in the Documentation directory * [http://kernel.org/doc/Documentation/HOWTO HOWTO] * [http://kernel.org/doc/Documentation/CodingStyle CodingStyle] * [http://kernel.org/doc/Documentation/SubmittingPatches SubmittingPatches] * [http://kernel.org/doc/Documentation/SubmittingDrivers SubmittingDrivers] * [http://kernel.org/doc/Documentation/SubmitChecklist SubmitChecklist] ARM Linux Developer * http://www.arm.linux.org.uk/developer/ === kmemleak === * Kernel Memory Leak Detector : http://www.procode.org/kmemleak/ * git branch (topic kmemleak) : http://www.linux-arm.org/git?p=linux-2.6.git;a=summary === mmap === * cache policy : arch/arm/mm/mmu.c {{{#!vim c static struct cachepolicy cache_policies[] __initdata = { { .policy = "uncached", .cr_mask = CR_W|CR_C, .pmd = PMD_SECT_UNCACHED, .pte = 0, }, { .policy = "buffered", .cr_mask = CR_C, .pmd = PMD_SECT_BUFFERED, .pte = PTE_BUFFERABLE, }, { .policy = "writethrough", .cr_mask = 0, .pmd = PMD_SECT_WT, .pte = PTE_CACHEABLE, }, { .policy = "writeback", .cr_mask = 0, .pmd = PMD_SECT_WB, .pte = PTE_BUFFERABLE|PTE_CACHEABLE, }, { .policy = "writealloc", .cr_mask = 0, .pmd = PMD_SECT_WBWA, .pte = PTE_BUFFERABLE|PTE_CACHEABLE, } }; }}} dma_alloc_coherent()와 dma_alloc_writecombine() 차이는 내부적으로 __dma_alloc()을 호출할 때 마지막 인자인 pgprot_t 타입의 prot에 넘기는 값이 다르다. dma_alloc_coherent()는 pgprot_noncached() 매크로를 사용하고, dma_alloc_writecombine()은 pgprot_writecombine() 매크로를 사용한다. * include/asm-arm/pgtable.h {{{ #define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE)) #define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE) }}} 즉, cache를 사용하지 않도록 설정하는 것은 같지만, 내부적으로 cache와 main memory 사이의 write buffer의 사용 여부를 결정하는 것으로 생각된다. dma_mmap_coherent()와 dma_mmap_writecombine()도 같은 맥락으로 보인다. dma_free_writecombine()은 다른 함수들과는 다르게 dma_free_coherent()로 매크로를 사용해 정의되어 있다. == Crosstool == Crosstool variables * http://freaknet.org/martin/crosstool/crosstool-vars.html GCC options you should know * http://www.freeos.com/articles/3185/ == Flash File System == Hints * http://lists.infradead.org/pipermail/linux-mtd/2007-July/018890.html jffs2, yaffs2 and ubifs - another flash file system * UBIFS - http://www.linux-mtd.infradead.org/doc/ubifs.html == MPlayer Codec == MPlayer에 Codec을 추가하거나 수정하는 방법을 짬짬히 기술. * MPlayerCodec == Google Android == Google Android 포팅 작업 및 관련 내용 정리한 문서. * AndroidPortingOnRealTarget == S3C6400 == KELP 세미나에서 작성한 자료. * [http://kelp.or.kr/korweblog/upload/54/20080715233355/S3C6400_NAND_Controller.pdf NAND Controller] * [http://docs.google.com/Present?docid=dhf2pf26_18fgc8hhhp&skipauth=true Multi Format Video Codec] * [http://docs.google.com/Present?docid=dhf2pf26_34cmjpbxgj&skipauth=true High Speed MMC Controller] * [http://docs.google.com/Present?docid=dhf2pf26_60g6gnzcfc&skipauth=true ADC & Touch Screen Interface] == Perl == === Perl의 암호 같은 기본 변수 === * $_ - 디폴트 스칼라 변수 * $: - 단어 구분자 * $% - Top of page format 에서 Page 번호 * $^ - 현재 선택된 파일핸들에 대한 Top of page format 이름 * $~ - 현재 선택된 파일핸들에 대한 Format 이름 * $= - 현재 선택된 파일핸들에 대한 페이지의 길이 * $- - 현재 선택된 파일핸들에 대한 현재 페이지의 남은 행의 수 * $/ - '\n'? * $^I - backup file extension on inplace editing * @ARGV - 말그대로 인자의 리스트 (인자만 포함됨) * %ENV - 현재 환경 변수 해시 * %SIG - 시그널 해시 ($SIG{'INT'} = 'my_interrupt_signal_catcher';) === Pattern === * $& - 정규표현식이 일치된 문자열 부분 * $` - 정규표현식이 일치된 문자열의 앞 부분 * $' - 정규표현식이 일치된 문자열의 뒷 부분 패턴 매치 후 \1, \2, \3과 같은 값을 $1, $2, $3 등에 설정한다. 이런 방법을 리스트 구문에 사용가능함. * /(\w)+\W+(\w)+/ - 패턴 매치 후 ($1, $2)와 같은 리스트로 사용 가능 * /(\S+)\s+(\S+)\s+(.*)/ - ($1, $2, $3)의 리스트로 사용 가능 perl과 vi의 substitution은 약간 다름 * s/(\S+)\s+(\S+)\s+(.*)/$1,$2,$3/ - perl의 경우 앞 패턴 내에서 \1 등을 사용 * s/\(\S+\)\s+\(\S+\)\s+\(.*\)/\1,\2,\3/ - vi는 앞의 sub pattern 참조시 \를 사용 == vi == === vimdiff === * vert diffs[plit] filename * diffthis * diffu[pdate] * [c - jump backwards to the previous start of a change. * ]c - jump forwards to the next start of a change. * do - obtain * dp - put * 1,$+1diffget - gets all diffs from the other buffer * !cp % tempfile * vert diffs[plit] tempfile === buffer === * bn - go to the next buffer in buffer list * bp - go to the previous buffer in buffer list