글

라벨이 embedded linux인 게시물 표시

vscode task 좋구나..

{     "version": "1.0.0",     "tasks": [         {             "label": "Release Build",             "type": "shell",             "command": "./build.sh",             "args": [             ],             "group": {                 "kind": "build",                 "isDefault": true             },             "problemMatcher": "$gcc"         },     ] }  크로스컴파일 환경이 독특하다보니 build.sh 에 스크립트로 만들어놓고 쓰고 있는데, vscode 로 정착하면서 방법이 없을까 찾아보던중 임시나마 task 로 쓸수 있는 방법을 찾아냄. ctrl+shift+b 로 build.sh 호출하고 ctrl+` 로 닫아버리면 되니까 좋구나! 이제 에러 위치를 클릭으로 띄울수 있게만 할 수 있으면 더 편해질듯!

usb-storage: page allocation failure: order:0, mode:0x20

https://access.redhat.com/solutions/90883 위 링크에서는 Red Hat Enterprise Linux 6 환경에서 발생한 문제 입니다만, 저는 Arm 9 계열 Embedded Linux 3.10.0 에서 발생한 문제입니다. USB-2에 16KBytes 단위로 루프를 돌며 딜레이 없이 최대 15GB까지 쓰다보니 엄청난 양의 page가 발생하였고, Free와 Cache를 오가는 메모리에 문제가 생겨서 page allocation failure 가 발생했을 것으로 추정하고 있습니다. 위 링크에서는 두가지 Workaround를 제공하고 있습니다. vm.min_free_kbytes 늘리기 : 정확한 수치는 제공하고 있지 않습니다만, 65535까지 늘려서 해결하였다는 포스팅이 제법 있습니다. 다만 아직 정확하게 파악하지 못해서 적용하지 않았습니다. vm.zone_reclaim_mode 이 0일 경우 1로 세팅 : linux v3.10.0 에는 이 기능이 없습니다. 그리하여 다른 방법을 찾아보던 중 다음과 같은 커널 패치를 찾았습니다. 어차피 USB-2의 속도로는 명령어 큐가 32가 되어도 충분하므로 256에서 32로 줄여도 무방하다고 합니다. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/usb/storage/uas.c?id=e2875c33787ebda21aeecc1a9d3ff52b3aa413ec 최신 커널에서 해당 패치가 적용되어 있으므로 커널을 재컴파일 해서 올라보았으나  https://github.com/torvalds/linux/blob/master/drivers/usb/storage/uas.c#L912 동일한 문제가 발생합니다. 결국 이 기능 외에는 루프를 돌며 수GB를 쓰는 기능이 없으므로 아예 기능을 빼버렸습니다. 다만 이 기능이 꼭 필요하다면 loop에 딜...

Buildroot - Making Embedded Linux Easy

이미지
build_root 라고 좋은 build_root?가 있습니다. 쉽게 bootloader, kernel 부터 rootfs와 필요한 라이브러리들은 죄다 설치해줍니다. qt부터 webkit까지 되는군요. 오예!? 필요한 일이 있어서 컴파일 해봅니다. 다운로드 받으러 간김에 repository에 가보니 다른 프로젝트와 다르게 commit이 정말 엄청나게 많군요!? 역시 모든 보드에 맞게 컴파일하고 잘 동작하게 하려면 엄청난 케바케가 있었던거죠. 먼저 홈페이지와 다운로드 https://buildroot.org/ $ wget https://buildroot.org/downloads/buildroot-2018.02.tar.gz $ tar xvfz buildroot-2018.02.tar.gz README를 봐줍니다. 1) run 'make menuconfig' 2) select the target architecture and the packages you wish to compile 3) run 'make' 4) wait while it compiles 5) find the kernel, bootloader, root filesystem, etc. in output/images 임베디드 개발자들에겐 익숙한 make menuconfig입니다. 하지만 옵션 하나 하나 다 선택하기는 매우 귀찮은 일이죠. 전 알려진 보드를 쓰기때문에 아마 config가 있을 겁니다. 역시 있군요! $ make menuconfig  *** 'make menuconfig' requires the ncurses libraries.  ***   *** Install ncurses (ncurses-devel) and try again. 실패! 초장부터 아름답군요. 덥벼라 build_root! $ sudo apt install libncurses5-dev 다시 $ make...

이 블로그의 인기 게시물

구글 시트에 여러 행 한번에 추가하기

WSL2 Ubuntu 20.04 및 네트워크 설정

우분투 terminator 에서 파일 경로 클릭시 vscode 에서 열기