본문 바로가기

Linux

systemd log를 dmesg와 console에 enable 하는 방법 참고 : https://www.freedesktop.org/software/systemd/man/journald.conf.html "/etc/systemd/journald.conf" 파일에 Forwardtokmsg, ForwardToConsole 를 yes로 변경. --> ForwardToSyslog=yes ForwardToKMsg=yes ForwardToConsole=yes 더보기
linux kernel 의 memory mapping 함수 정리 vaddr* = __ioremap(paddr, size) : paddr 로 시작하는 size만큼의 address 를 PA에서 VA로 mapping 한다. mmu page table에 이 range가 등록된다. vaddr* = phys_to_virt(paddr) paddr* = virt_to_phys(vaddr) : 이미 mmu page table에 등록된 range에서 찾아서, paddr 과 vaddr을 변환해 준다. 등록안된 addr에 대해서는 fail 할 것이다. 더보기
__meminit section keyword 아래와 같이 _meminit section keyword 가 붙은 함수들을 볼 수 있다. 이러한 함수들은 linux kernel booting 초반에만 code영역에 위치하고, 이후 code영역이 overwrite된다. 즉, booting 초기에만 사용될 함수라고 보면 된다. extern int __meminit early_pfn_to_nid(unsigned long pfn); /* there is a per-arch backend function. */ extern int __meminit __early_pfn_to_nid(unsigned long pfn, struct mminit_pfnnid_cache *state); 부팅이 일정이상 진행되면 호출할 수 없다. 더보기
memory compaction (kcompactd) Kswapd & Kcompactd 노드마다 kswapd와 kcompactd가 동작하며 free 메모리가 일정량 이상 충분할 때에는 잠들어(sleep) 있다. https://www.kernel.org/doc/Documentation/sysctl/vm.txt compact_memory Available only when CONFIG_COMPACTION is set. When 1 is written to the file, all zones are compacted such that free memory is available in contiguous blocks where possible. This can be important for example in the allocation of huge pages a.. 더보기
[linux kernel] memory zone 원문 : http://rousalome.egloos.com/10002612 [리눅스커널] 메모리관리: 메모리 존(Zone) 종류와 개념 소개 리눅스 메모리 시스템에서 존(Zone)은 유사한 속성의 페이지들을 집합입니다. 커널에서 페이지들을 다음과 같은 존으로 나눠서 관리합니다.  ZONE_NORMAL  ZONE_HIGH_MEM  ZOME_MOVEABLE 다음 그림은 존과 페이지과의 관계도입니다. [그림 14.22] 존과 페이지와의 관계 위 그림에서 rousalome.egloos.com 리눅스 메모리 시스템에서 존(Zone)은 유사한 속성의 페이지들을 집합입니다. 커널에서 페이지들을 다음과 같은 존으로 나눠서 관리합니다.  ZONE_NORMAL  ZONE_HIGH_MEM  ZOME_MOVEABL.. 더보기
buddy allocator가 왜 buddy인가? 원문 : https://woodz.tistory.com/57 더보기
proc/meminfo 분석하기 와 pagecache size limitation(restrict) 하는 방법 1. meminfo 분석하기 전반적인 내용 : https://ssambback.tistory.com/entry/Linux-Memory%EC%9D%98-%EC%83%81%ED%83%9C%EB%A5%BC-%EB%B6%84%EC%84%9D%ED%95%98%EB%9D%BC Linux Memory의 상태를 분석하라 리눅스의 메모리 사용량의 경우 항상 물리적인 메모리 대비 Cache 와 Buffer의 사용량에 대해서 논쟁이도고는 한다. 물론 운영중에 갑자기 물리적인 메모리의 사용량이 늘어서 SWAP을 사용하는 경우라면 달라지겠.. ssambback.tistory.com 정보는 최고사용량과 최저사용량으로 표현되며, 먼저 최고사용량에 대해 살펴보면 다음과 같다. - MemoryTotal : 사용 가능한 최대 메모리(R.. 더보기
[systemd-analyze] systemd debugging & analyze method http://manpages.ubuntu.com/manpages/bionic/man1/systemd-analyze.1.html Ubuntu Manpage: systemd-analyze - Analyze and debug system manager Powered by the Ubuntu Manpage Repository, file bugs in Launchpad © 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd. manpages.ubuntu.com 어떤 daemon 이 systemd 의 초기화를 느리게 하고 있다면, 아래 command로 확인이 가능하다. systemd-analyze blame 더보기
linux shell 의 sysfs에서 device-tree 뽑아내는 방법 dtc 라는 tool 을 사용하면 된다. dtc -I fs -O dts -o output.dts /proc/device-tree 더보기
linux devicetree - interrupt 원본 : liunx Documentation/devicetree/bindings/arm/gic.txt linux document 의 설명이 애매해서 좀 더 풀어서 남긴다. ex)interrupt-controller@2c001000 {compatible = "arm,cortex-a15-gic";#interrupt-cells = ;interrupt-controller;reg = , , , ;interrupts = ;}; #이 있다고 주석이 아니다. 3 이라는 숫자는 interrupts = 에 3개의 값이 들어감을 의미한다. The 1st cell is the interrupt type; 0 for SPI interrupt.. 더보기
irq 와 fiq 의 차이점 원문 : http://blog.naver.com/PostView.nhn?blogId=nhi1999&logNo=100036266880&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 원문요약 IRQ : Interrupt ReQuestFIQ : Fast Interrupt reQuest arm 에서 FIQ 가 IRQ 보다 빠른 이유 1) 전용 register 가 많아서 mode 전환시 stack 으로 store 하는 시간 절약 ----------------------------------------------------- User FIQ Super Abort IRQ Undefined -------------------.. 더보기
shell terminal 이 종료되어도 계속해서 작업 수행되도록 하기 원문 : http://dreamlog.tistory.com/470build 같이 시간이 걸리는 작업을 걸어놓으면, windows pc 를 off 할 수 없어서 곤란한 상황이 생길때가 있다. 혹은 실수로 터미널을 종료할 때도 있다. 아래와 같이 screen 을 사용하면 그런 우려를 덜 수 있다. 자세한 설명은 위 원문에 잘 설명되어 있고, 사용법만을 보관을 위해 적어 둔다. . screen 사용법screen 만들기.$ screen -S build1 screen 목록 보기.$ screen -listThere is a screen on: 3703.build1(2015년 11월 11일 01시 43분 38초)(Attached) 1 Socket in /var/run/screen/S-hyunmu. 사용 예)$ scr.. 더보기
patch 적용하기, diff, sdiff 원문 : https://blog.naver.com/zeta0807/220943464598 1. diff --brief간략한 폴더비교를 할 일이 자주 있다. 아래와 같이 사용하면 된다.diff --brief -r folder1/ folder2/아래 site를 참조하였으며 엄청난 option들이 있다. http://stackoverflow.com/questions/4997693/given-two-directory-trees-how-can-i-find-out-which-files-differ You said Linux, so you luck out (at least it should be available, not sure when it was added): diff --brief -r dir1/ dir2/ .. 더보기
Linux storage stack diagram https://www.thomas-krenn.com/de/wikiDE/images/2/2d/Linux-storage-stack-diagram_v4.0.pdf 더보기
loop device and losetup 원문 : https://cafe.naver.com/taskers/10933 loop는 이미지파일을 블록 디바이스로 인식되게 해주는 디바이스 드라이버입니다.즉, 이미지 파일을 마운트 시켜줍니다. 쉽게 말해서 윈도우즈의 데몬툴이나 시디스페이스 같은 것이라 보면 됩니다.그러나 그 기능과 성능은 훨씬 강력합니다. 아래는 loop를 이용하여 100MB짜리 vfat 이미지를 마운트하는 예제입니다. 진행하려면 비지박스와 루팅은 필수입니다.터미널이나 ADB Shell에서 진행하세요. 1. 일단 dd를 이용해서 100메가짜리 공파일을 뜹니다. dd if=/dev/zero of=/mnt/sdcard/vdrive.img bs=1000000 count=100 dd : 덤프를 뜹니다. if=[덤프대상] of=[덤프결과]/dev.. 더보기
linux partitions (sda, sda1, sda2...) # cat partitions major minor #blocks name 1 0 8192 ram0 8 0 247087104 sda -> 디스크.. 보통 여기에 파티션을 만들지는 않는다. 8 1 204800 sda1 -> 실제 파티션 8 2 1048576 sda2 8 3 1048576 sda3 8 4 1048576 sda4 8 5 30720 sda5 8 6 102400 sda6 8 7 20480 sda7 8 8 30720 sda8 8 9 614400 sda9 8 10 17039360 sda10 8 11 225898444 sda11 8 16 4096 sdb 8 32 4096 sdc = 아래는 byte 단위 일듯 # cat size 494174208 # cat /sys/block/sda/sda1/start .. 더보기
dtb(device tree blob) file parser(command) on linux fdtdump dtb_file.dtb > /tmp/test.txt 더보기
SetUID / SetGID Special File Permissions 출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=128463841&page=1#answer1안녕하세요.. 답변이 될지 모르겠으나 Set UID / Set GID에 대해 설명드리겠습니다. Set UID는 chmod 4000 권한으로 실행되며, Set GID는 chmod 2000 권한으로 실행합니다.둘다 설정하시려면 6000 권한으로 설정 하시면 됩니다.( 여기서 000은 일반 퍼미션 이며, 파일 실행권한은 꼭 가지고 있어야 합니다. ) 파일 퍼미션 설정이 기본적으로 rwx/rwx/rwx 로 이런 식으로 설정이 되나,Set UID설정 시 rws/rwx/rwx로 변경.Set GID설정 시 rwx/rws/rwx로 변경.둘다 설정 시 rws/r.. 더보기
The result of getmntent() function The example codeFILE* fp = setmntent("/proc/mounts", "r"); if (fp == NULL) { ALOGE("Error opening /proc/mounts: %s", strerror(errno)); return -errno; } // Some volumes can be stacked on each other, so force unmount in // reverse order to give us the best chance of success. std::list toUnmount; mntent* mentry; while ((mentry = getmntent(fp)) != NULL) { if (strncmp(mentry->mnt_dir, path, path_len).. 더보기
Calculation real size from results of 'df' and 'stat' "df" show result based on KB unit."stat" using block unit that it can be get from "stat"'s result. # df -h /efsFilesystem Size Used Avail Use% Mounted on/dev/block/mmcblk0p16 12M 712K 11M 6% /efs # df /efsFilesystem 1K-blocks Used Available Use% Mounted on/dev/block/mmcblk0p16 12016 712 11304 6% /efs 1K-blocks : total block count12016(KB)/1024 = 11.734712(KB) # stat -f /efs File: "/efs" ID: d360.. 더보기
signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 참고 URL : http://stackoverflow.com/questions/3246441/what-does-bus-adraln-invalid-address-alignment-error-meanshttp://www.badayak.com/3302 일반적으로 point 변수에 잘못된 값이 들어가 있을 경우는 null point exception 이나 다른 error 가 발생할 것이지만, 변수 자체가 invalid address alignment error 가 발생했다는 것은, 다른 수행에 의해서 변수 값 영역이 침범당했음을 의미한다. 아래 아티클의 작성자는 원인을 찾지 못했지만,http://www.badayak.com/3302아마 원인은 아래 (1) 을 수행할때 f_value3 영역이 침범당했기 때문일 것.. 더보기
ps command PC meaning, ps 명령어 의미 root@graceqltevzw:/ # ps USER PID PPID VSIZE RSS WCHAN PC NAMEroot 1 0 5920 912 SyS_epoll_ 00004cfa20 S /initroot 2 0 0 0 kthreadd 0000000000 S kthreaddroot 3 2 0 0 smpboot_th 0000000000 S ksoftirqd/0root 4 2 0 0 worker_thr 0000000000 S kworker/0:0...root 645 1 4344 408 SyS_epoll_ 000044a668 S /sbin/healthdroot 647 1 6536 2080 SyS_epoll_ 7f952d2594 S /system/bin/lmkdsystem 648 1 7508 2548 binder.. 더보기
makedev makedev (3) #include dev_t makedev(unsigned int maj, unsigned int min); unsigned int major(dev_t dev); unsigned int minor(dev_t dev); linux device driver 는 major num 와 minor num 로 관리되는데 이 두 number 를 하나의 type 으로 정의한 것이 dev_t 이다. makedev system call 은 실제 '/dev' 에 device node 를 생성하는 것이 아닌,단순히 major, minor number 를 조합해서 dev_t type 을 생성해 주는 역할이다. makedev (8) 반면에 makedev 실행 파일은 실제로 '/dev' 에 주어진 major .. 더보기
find PID as process name and send signal using shell script #!/system/bin/shecho "sigquit.system_server.sh: start" > /dev/kmsgecho "sigquit.system_server.sh: start"sleep 10.0str=""echo "sigquit.system_server.sh: delay finish" > /dev/kmsgecho "sigquit.system_server.sh: delay finish"while [ "$str" = "" ]; do str=`ps | grep system_server` sleep 0.1donepid=${str:10:4}echo "sigquit.system_server.sh: kill -3 ${pid}" > /dev/kmsgecho "sigquit.system_server.sh: k.. 더보기
get pid by process name - example source code (예제 코드) 원문 : https://phoxis.org/2013/09/13/find-process-ids-of-a-running-process-by-name/ 이름으로 pid 를 찾아내는 예제 #include #include #include #include #include #include /* checks if the string is purely an integer * we can do it with `strtol' also */int check_if_number (char *str){ int i; for (i=0; str[i] != '\0'; i++) { if (!isdigit (str[i])) { return 0; } } return 1;} #define MAX_BUF 1024#define PID_LIST_BL.. 더보기
xming dual(multiple) monitor setting "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow -screen 0 @1 -dpi 96 -ac -lesspointer 간혹 창의 크기가 화면을 넘어가면-screen 0 1920x1080@1으로 셋팅을 바꾸었다가 다시 원복 (주 모니터 밖에 표시가 안됨) 더보기
file open 시 fd 번호 부여 방식 하나의 process 에서 한 파일을 연속으로 open 할때 fd number 부여 방식 - 이전에 3 이라는 fd 숫자를 써서 open 하고 close 를 함.- 다음 open 때는 fd 로 3이 부여 된다.- 따라서 file close 이후에는 항상 fd 에 -1 을 저장하는 것이 중요함. test code#include //#include #include #include #include #include #include #include // O_WRONLY#include // strlen() #define BUFF_SIZE 1024 int main(){ char buff_r[BUFF_SIZE], buff_w[BUFF_SIZE]; int fd[10];int rst;int fd_num; for(int i.. 더보기
kill parent and child process sametime #include //#include #include #include #include #include #include int main(int argc, char *argv[]){// signal(SIGALRM, timer_handler); // add handler about sigalrm pid_t pid, child_pid; int rc=0; pid = fork(); if (pid == 0){ // childprintf("[child] I'm child(%d)\n", getpid()); //char *argvs[] = {~~~~~~~, (char *)0}; //return execv(~~~~~~~~~); // run other program pid_t ppid = getppid();pid_t pgid .. 더보기
linux 개발을 위한 source insight tab 설정하기 원문 : http://jaram.tistory.com/202 alt + t를 누름1. Tab width를 4 로 설정2. Expand tab을 enable로 설정3. Auto Indent는 취향에 맡게 simple에 체크 둘다 해주는거... tab --> space로 일괄 변경1. 소스 전체 선택2. alt+ e3. special --> tab --> space 누름 정해진 tab width만큼으로 모두 변경됨 내가 쓰는 simple 한 치환 방법 tab 을 복사한 후Ctrl+h 를 눌러서 치환 문자열에 복사한 tab 을 붙여넣기 하고대체 문자열에 스페이스 4번 입력후 all 더보기
fstab & partition images type 의 emmc -> 는 row data 를 뜻함.즉, filesystem 없이 blk 단위로 read/write 하는 partition 임. # /dev/block/platform/msm_sdcc.1/by-name/boot /boot emmc default recoveryonly/dev/block/platform/msm_sdcc.1/by-name/recovery /recovery emmc default recoveryonly/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 default recoveryonly/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 default wait,leng.. 더보기