본문 바로가기

분류 전체보기

mmap (user space)의 MAP_ANONYMOUS 에 대해서... mmap은 보통 file이나 kernel이 alloc한 memory를 user space에서 remap해서 VA로 접근하기 위해 사용하지만, MAP_ANONYMOUS 로 사용할 경우는, addr=0, fd=-1로 설정하게 된다. 어떤 case에서 이러한 mapping을 사용하는지 보자. 우선, MAP_ANONYMOUS로 할당한다고 해도, user application 상에서 이 memory를 read write 하는데는 아무런 문제가 없다는 것을 미리 알아두자. http://jake.dothome.co.kr/user-virtual-maps-mmap2/ 어떠한 파일하고도 연결되지 않고 0으로 초기화된 영역. fd는 무시되지만 어떤 경우에는 -1이 요구된다. offset는 0으로 한다. MAP_SHARED와.. 더보기
module_driver() 호출 시기 insmod / rmmod 시 __register 함수와 __unregister 함수를 자동으로 호출해 준다. bus에 특정한 mecro를 만들기 위해서 사용해야 하며, 단독으로 사용하면 안된다. Parameters struct device * devDevice to perform the check on module_driver(__driver, __register, __unregister, …) Helper macro for drivers that don’t do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it re.. 더보기
TTBR0_EL1, TTBR1_EL1, TTBR0_EL2, VTTBR_EL2, TTBR1_EL2 헷갈리는 TTBR register들의 역할을 정리해 보았다. 참조 : https://developer.arm.com/docs/100942/latest/hypervisor-software TTBR0_EL1 : EL1에서 동작. 하위 mem (0x00000000_00000000 ~ 0x0000FFFF_FFFFFFFF) user space 는 translation 되고, kernel 은 identical mapping (VA PA) TTBR1_EL1 : EL1에서 동작. 상위 mem (0xFFFF0000_00000000 ~ 0xFFFFFFFF_FFFFFFFF) user space 는 translation 되고, kernel 은 identical mapping (VA PA) TTBR0_EL2 : EL2에서 동작.. 더보기
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 더보기
analyseplugin - log 분석을 위한 notepad++ 의 유용한 plugin analyseplugin 플러그인은, log와 같은 text 문서에서 내가 입력한 string들을 포함하고 있는 모든 line을 특정 color로 extrect해서 순서대로 정렬해 준다. 따라서, 의미있는 로그 문구(panic, error, abort 등)들을 미리 입력해서 xml 형태로 저장해 두면, 매우 빠르게 log file에서 해당 문구가 있는지 확인할 수 있다. 한동안 notepad++에서 잘 사용하던 analyseplugin이 notepad++ update이후 더이상 plugin list에서 보이지 않아 매우 아쉬워하고 있었는데, 여전히 sourceforge에 project가 살아있고 최근(2020.06)까지 update가 된것을 발견하였다. https://sourceforge.net/proj.. 더보기
primitive 해석 - IT 용어 IT 설명중에 primitives 가 나오는 경우가 꽤 있다. 이는 해당 기능을 구현하기 위한 근간 기술을 지칭할 때 사용한다. 예를 들면 아래와 같이 기술되었다면, 동기화를 위해서 베리어 구현과 신뢰할만한 signalling 기능을 사용했다는 의미가 된다. Synchronization primitives - barrier implementation - reliable signalling (in progress) 더보기
Microsoft Print to PDF 출력 시 가로/세로 전환하기 이미지나 문서를 PDF로 저장하기 위해서, windows에서 기본으로 제공하는 Microsoft Print to PDF는 매우 유용한 tool이다. 하지만, 원치 않게 용지 방향이 누워있는 경험을 하게 된다. 이경우 옵션 -> 프린터 속성으로 들어가면, 용지 방향 변경이 가능하다. 이제 원하는 용지 방향으로 pdf file을 생성할 수 있다. 더보기
NMI (nun-maskable interrupt) arm및 arm64에는 NMI를 지원하지 않음. GICv3 + kernel 5.x 에서 pseude-NMI를 구현하였음. 자세한 내용 -> http://jake.dothome.co.kr/ic/ 더보기
PlantUML PC 설치버전 - PlantUML QEditor https://sourceforge.net/projects/plantumlqeditor/ 드디어 plantUML의 PC설치 버전을 찾았다. web버전과 같이 text로 입력하면, 바로 UI로 update해서 보여주고, java plantUML처럼 매번 build할 필요가 없다. 최초 실행시 설정에서 다음 executable file들의 경로를 맞추어 주어야 합니다. - java - plantuml.jar - Graphviz : www2.graphviz.org/Packages/stable/windows/10/cmake/Release/x64/ Index of /Packages/stable/windows/10/cmake/Release/x64 www2.graphviz.org 저의 경우에는 GRAPHVIZ 관련 .. 더보기
Embedded system의 약어(abbreviation) 정리 IP : Intellectual Property PE : Processing Element 주로 AP(application processor)내의 core 연산 모듈을 뜻한다. 더보기
ARM core의 feature enable 여부 확인 방법 ID_AA64MMFR0_EL1, ID_AA64MMFR1_EL1 과 ID_AA64MMFR2_EL1 register값을 확인하면, 어떤 feature 들이 현재 ARM core에서 support 되는지 여부를 알 수 있다. developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64mmfr2_el1 developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64mmfr1_el1 예를들어 현재 사용중인 ARMv8.4-NV 기능 지원 여부를 알고 싶은데, register 값이 ID_AA64MMFR2_EL1: 0x1011 이다. 위 링크한 문서에 따르면 ARMv8.4-NV기능은 아래 bit의 값을 읽고 .. 더보기
Google Play Music에 곡 upload시 can't establish secure connection error 문제 Google Play music은 10만곡의 개인 노래를 사이트에 업로드 할 수 있고, 이를 Playlist로 만들면, google home에서 유용하게 사용할 수 있습니다. 이를 사용하려면 미국 google 계정을 만들어야 하고, 북미쪽으로 VPN을 사용하는 등, 조금 복잡한 과정을 거쳐야 하지만, 이를 소개하는 blog는 많으므로, 이 방법은 다른 사이트를 참고하면 된다. 근래에, google 쪽에서 google play music에 대한 update를 진행하고 있는지, 잘되던 서비스들이 안되거나 조금씩 변경이 일어나고 있다. 급기야는, chrome을 통해 신규로 music을 upload하려고 하는데, 아래와 같은 error가 나오면서 더이상 music upload가 안되는 현상이 발생하였다. (VP.. 더보기
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 할 것이다. 더보기
taskset : user process 를 특정 cpu에서 동작하도록 하기 원문 : http://coffeenix.net/board_view.php?bd_code=1702 ■ Taskset 이란? TaskSet은 프로세스가 사용할 CPU(CPU affinity) 를 보여주거나 지정해준다. ■ 사용 방법 taskset [options] [mask | list ] [pid | command [arg]...] mask는 Process가 사용할 CPU 값을 나타내며 16진수로 표현이 된다. 0x00000001 는 0번 프로세스(CPU)의 사용을 나타내며 0x00000003 는 0번과 1번 프로세스(CPU)의 사용을 나타내며 0xFFFFFFFF 는 모든 프로세스(CPU)의 사용을 나타냅니다.(0 ~ 31번..) 물론, mask를 프로세서(CPU)의 숫자로 표현할 수도 있다. mask를 .. 더보기
[Beat saber(비트세이버)] custom song(커스텀 송, 사용자 곡)을 bsaber.com 사이트와 연동해서 자동 다운로드 하기 (SyncSaber 사용) 이 글은 ":오큘러스 리프트s" + "steam 설치 beat saber"를 기준으로, bsaber.com 사이트에서 "SyncSaber"를 이용해 자동으로 비트세이버에 커스텀 곡들을 다운로드 하는 방법을 설명하고자 적었습니다. 구글링을 해봐도 오래된 방법만 나오고, 하나씩 곡을 zip 파일로 다운로드 해서 설치하면 관리도 어렵기 때문에 이 방법이 현재 가장 손쉬운 방법인것 같습니다. (2020년 4월 기준) 1) https://bsaber.com/ 사이트에 접속을 하여서 회원가입을 합니다. 2) 선곡하기 상단 메뉴에 "SONGS" 버튼을 누릅니다. 다양한 곡들이 나오고, 정렬이나 장르 선택이 가능합니다. 처음 접하시는 분들은 "ALL" + "TOP"을 추천드립니다. 마음에 드는 곡을 발견하면, 왼쪽에 .. 더보기
ARM core architecture version 확인하기 우리가 흔히 ARMv8.0, ARMv8.1 이러한 식으로 ARM architecture version을 이야기 하는데, system 상에서 이를 확인하는 방법에 대해 알아보자. MPIDR_EL1 register의 값을 통해 알 수 있는데, linux kernel 에서는 이 정보를 procfs로 읽을 수 있다. cat /proc/cpuinfo processor : 이 core의 physical number이다. system에 8개의 pCore가 있다면 0~7까지 정보가 출력된다. BogoMIPS : 생략 Features : .... 이 core에 적용된 feature들을 나열한다. CPU implementer : 생략 CPU architecutre : ARM core의 main version number .. 더보기
__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.. 더보기
Class diagram 의 Relationship 표현 (화살표) dependency Association Aggregation Composition Inheritance 더보기
Docker, Container, Kubernetes, Hypervisor(Virtual Machine) 결론 : 내가 생각하는 Docker 와 Virtual Machine(Hypervisor)의 장단점 Docker - Type2 Hypervisor - Type1 Hypervisor commit 을 사용해서 작업하던 container를 image로 만들기 더보기
ms-word 문서 pdf 생성시 "오류! 알려지지 않은 문서" 해결 방법 "Alt-F9" 키를 누르면, error 가 발생한 field가 보인다. 이 field를 수정하거나 삭제한다. 만약 error가 발생한 부분이 머리글이나 바닥글이라면 아래 경로로 들어가서 수정한다. 삽입 -> 머리글 편집(or 머리글 제거) How to fix "ERROR! Unknown document property name" 참고 : https://microsoft.public.word.application.errors.narkive.com/iY7fWWhE/error-unknown-document-property-name-when-printing-from-word 더보기
ms-word 문서 pdf 로 변환 시 배경에 회색박스가 생기는 문제 디자인 -> 페이지 색 -> 흰색으로 변경 When you convert ms-word document to pdf format, if color background is occured, you can fix with this mothod. Design -> page color -> change color to 'white' https://answers.microsoft.com/en-us/msoffice/forum/all/save-as-pdf-from-word-2010-formats-background-as/eed4550a-f75b-4a7e-9748-b461aaa2d366 더보기
[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 더보기
Design Pattern - Chain of Responsibility (COR) 사용 예 : 버튼에서 F1을 누르면 help request가 계속해서 상위 UI 객체로 전달되다가, help method를 가지고 있는 최초의 UI가 처리하고, 더이상 전달하지 않음. 더보기
Design pattern - mediator 목적 : N : N 의 관계를 단순화 시킬때 사용 더보기
[arm] EL2 에서 EL1의 virtual address 보기 EL2 mode 에서 동작하는 code 에서 vbar_el1 값을 읽으면 아래와 같이 보인다. VBAR_EL1 FFFFFF8008082000 VBAR_EL2 00000000800BC800 vbar_el2 의 address 값을 d.l 로 보면, 아래와 같이 exception vector table을 볼 수 있으나, vbar_el1의 값을 따라가 보면 아무것도 볼 수 없다. 0x800BC800 _arm64_vectors_base: .global arm_vectors_minimal arm_vectors_minimal: // SPSel == 0 _arm64_fault // Synchronous EL2 _arm64_fault // IRQ EL2 _arm64_fault // FIQ EL2 _arm64_fault .. 더보기
[armv8] ESL_EL2 분석 - stage2 data abort 아래는 stage2 mmu에서 data abort가 발생했을때 확인된 ESR_EL2 를 분석한 내용이다. ESR (Hexadecimal format, 'q' or 'Q' : Terminate): 0x93830006 2 2 2 1 1 8 4 0 6 2 8 4 0 ----------------------------------------- 1001 0011 1000 0011 0000 0000 0000 0110 ----------------------------------------- ============================================================== Exception from a Data Abort from a lower exception level ========.. 더보기