MinUk.Dev
Pintos - minuk dev wiki

Pintos

created : Tue, 07 Apr 2020 20:20:28 +0900
modified : Sat, 27 Jun 2020 14:54:37 +0900

설정하기 Configuration

프로젝트 기본 다운로드

  • 대부분 우분투에서 설정할테니, 다른사람들이 잘 설정해좋은거 다운 받자
$ git clone https://github.com/kumardeepakr3/PINTOS-Ubuntu.git
$ cd PINTOS-Ubuntu
$ bash ./pintos_ubuntu.sh
  • 여기서 9,10 작업은 필요가 없는 작업이니 다시 원복해주자

vim 설정하기

  • 나는 vim(정확히는 neovim)으로 코딩할꺼니 자동완성 같은걸 설정해주자
  • 여기서는 [[coc]], [[tagbar]], [[ALE]], [[cscope]]를 사용해서 설정했다.

coc

  • ccls 를 설치하고
  • CocLocalConfig를 명령어로 친뒤
{
    "languageserver": {
        "ccls": {
            "command": "ccls",
            "filetypes": [
                "c",
                "cpp",
                "objc",
                "objcpp"
            ],
            "rootPatterns": [
                ".ccls",
                "compile_commands.json",
                ".vim/",
                ".git/",
                ".hg/"
            ],
            "initializationOptions": {
                "cache": {
                    "directory": "/tmp/ccls"
                },
                "clang": {
                  "resourceDir": ".",
                  "extraArgs": ["-isystem./", "-isystem./lib/kernel", "-isystem./lib"]
                }
                
            }
        }
    }
}

tagbar, ale 설정

  • local.vim(프로젝트 폴더에다가 두는 vimrc 설정, 자세한건 [[vim]] 참조)
let g:ale_linters= { 'c' : ['g++'], 'cpp' : ['g++'] }
let g:ale_c_gcc_options="-I. -I./lib/kernel -I./lib -Wall"
let g:ale_cpp_gcc_options="-I. -I./lib/kernel -I./lib -Wall"
function! LoadCscope()
  let db = findfile("cscope.out", ".;")
  if (!empty(db))
    let path = strpart(db, 0, match(db, "/cscope.out$"))
    set nocscopeverbose " suppress 'duplicate connection' error
    exe "cs add " . db . " " . path
    set cscopeverbose
  " else add the database pointed to by environment variable
  elseif $CSCOPE_DB != ""
    cs add $CSCOPE_DB
  endif
endfunction
au BufEnter /* call LoadCscope()

shutdown 버그 수정

  • pintos를 키면 계속 죽는다.
  • src/devices/shutdown.c 에서
   /* This is a special power-off sequence supported by Bochs and
      QEMU, but not by physical hardware. */
   for (p = s; *p != '\0'; p++)
     outb (0x8900, *p);

+  outw (0x604, 0x0 | 0x2000); /* Fix shutdown */
+
   /* This will power off a VMware VM if "gui.exitOnCLIHLT = TRUE"
      is set in its configuration file.  (The "pintos" script does
      that automatically.)  */
   asm volatile ("cli; hlt" : : : "memory");

   /* None of those worked. */

로 추가해준다.

thread