2022년 9월 19일 월요일

SecureBoot 설정

Secureboot

Archlinux에서 secure boot를 적용하는 가장 간단한 방법은 sbctl을 사용하는 것이다.

필요

보안 문제도 있겠지만, 하나의 host에서 MS Windows와 함께 사용하는 경우 다음 문제들이 있었다.

  • 일부 장치가 윈도에서 secureboot 하에서만 정상 동작
  • 리눅스와 함께 사용 시 해당 장치를 사용 못하는 것은 차치하더라도 매번 바이오스에서 secureboot를 껐다 켰다 해야 하는 번거로움

순서

  1. UEIF firmware 설정에서 secure boot를 켜고, 키를 모두 리셋한다.
  2. 키가 없으므로 일단 부팅은 secure boot가 꺼진 상태로 진행된다.
  3. bootctl statussbctl status로 현태 부트로더 상태 확인
  4. sbctl create-keys로 키 생성
  5. sbctl enroll-keys -m으로 Microsoft의 키를 UEFI Firmware에 등록
  6. sbctl verify로 필요 파일들 확인
  7. sbctl sign -s <파일 이름>으로 필요한 파일 하나씩 사인 및 등록
  8. sbctl verify로 사인 상태 확인
  9. 재부팅 후 sbctl status, bootctl status를 이용해 secure boot 상태 확인

위 순서대로 진행하면 secureboot를 사용할 수 있다.

GRUB을 사용하는 경우

systemd-boot를 사용하는 경우에는 위 순서만 따르면 문제가 없지만, grub을 사용할 때는 부팅이 되지 않았다. TPM이 문제인 것으로 보이며, TPM을 포함해 grub을 EFI 파티션에 재설치 해 주고 sbctl로 다시 사인해두면 grub으로 secureboot 사용이 가능하다.

  • 인스톨 시 옵션 예제
    grub-install -target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch --modules="normal test efi_gop efi_uga search echo linux all_video gfxmenu gfxterm_background gfxterm_menu gfxterm loadenv configfile tpm" --disable-shim-lock
    grub-mkconfig -o /boot/grub/grub.cfg
    

관리

업데이트 등의 이유로 기존 사인된 EFI 부트로더 이미지가 변경되는 경우, 재 사인을 해주면 된다.

sbctl sign-all
sbctl verify

단, systemd-boot를 사용하는 경우 EFI 사이닝을 /usr/lib/systemd/boot/ 디렉토리 내에서 직접 해주면 위 방법으로 바로 반영이 되나, 아니면 두 번의 재부팅이 필요해 업데이트 마다 secure boot를 꺼주어야 하는 문제가…

2022년 9월 16일 금요일

MediaWiki 백업/복구

MediaWiki 백업/복구

백업

MediaWiki를 백업 할 때는 데이터베이스와 데이터 파일들, 설정 파일들을 백업하면 된다.

데이터베이스 백업

mysqldump를 이용해 파일로 백업한다. sql 파일로만 백업해도 되는데, 만약을 위해 xml로도 백업하는 것을 mediawiki에서 권장한다.

mysqldump --user=$wgDBuser --password=$wgDBpassword $wgDBname > <filename>.sql

각각은 미디어 위키의 DB에 대한 계정, 비밀번호, DB 이름으로 읽기 쉽게 미디어위키 디렉토리의 LocalSettings.php 파일의 해당 변수값을 사용하면 된다.
xml로 저장을 하려면 --xml 옵션을 붙여 저장하면 된다.
mysqldumpstdout으로 출력하므로 파일로 redirection 해 백업한다.

데이터 파일 및 설정 파일 백업

미디어위키 디렉토리 내부에 저장되어 있는 파일들을 따로 압축해야 한다. 설치 후 별도로 수정하거나 추가된 파일들을 모두 백업하면 된다고 생각하면 된다.

필수적 백업 사항

작성한 글 관련해서는 이미지와 첨부 파일들이 images 디렉토리에 저장되어 있고, 위키 설정은 LocalSettings.php 파일에 저장되어 있다. 이 둘은 반드시 백업에 포함되어야 한다.

옵션 백업 사항

별도로 추가한 확장이나 스킨은 각각 extentionsskins 디렉토리에 설치 되는데, 이를 따로 백업 해도 되고, 업데이트 시 별도로 설치해도 된다. 각 extenstions나 skins에서 따로 설치한 파일이 있는 경우 해당 파일들은 반드시 백업 해 두어야 한다.
모든게 귀찮다면 디렉토리 통째로 백업해도 된다.

설치/복구

사전 준비

웹서버, 데이터베이스, PHP를 설치해야 하고 옵션으로 기타 php 모듈들과 git, 이미지 처리 엔진 등을 설치해야 한다. nginx, mariadb를 사용할 때 armbian 기준으로는 다음 명령으로 설치할 수 있다. nginx를 사용할 때는 php-fpm을 반드시 설치해야 하는 것 같다.

sudo apt install nginx mariadb-server php php-mysql php-xml php-mbstring php-apcu php-intl php-gd php-cli php-curl git php-bcmath php-fpm imagemagick inkscape composer

데이터베이스 설정

루트 계정을 생성/암호 설정을 하고 DB를 설정/생성한 뒤 사용자 계정을 추가한다.

sudo mysql_secure_installation
sudo mysql -u root -p
CREATE DATABASE <dbname>;
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON <dbname>.* TO '<username>'@'localhost' WITH GRANT OPTION;
QUIT;
sudo systemctl restart mariadb

<dbname>, <username>, <password>는 추후 LocalSettings.php 파일의 $wgDBname, $wgDBuser, $wgDBpassword변수에 할당해 주면 된다.

기존 백업한 sql 파일로부터 복원한다면 다음 명령을 사용한다.

mysql -u $wgDBuser -p $wgDBname < <filename>

웹서버, PHP 설정

nginx
  1. 사용 환경에 맞게 /etc/nginx/nginx.conf 파일을 수정한다.
  2. /etc/nginx/sites-available 디렉토리 내에 새 서버 파일을 생성한다.
    • 웹서버 포트, 서버 이름, 서버 파일 위치와 접근성을 설정한다.
  3. /etc/nginx/sites-enabled 디렉토리 내에 앞서 생성한 서버 파일의 링크를 만들어 둔다.
php-fpm

/etc/php/<version>/fpm/php.ini 파일을 사용 목적에 맞게 설정한다.

설치

mediawiki 홈페이지에서 다운받아 웹서버 설정 파일에 지정한 곳에 압축을 해제하면 된다.
이후 LocalSettings.php 파일에서 미디어 위키 설정을 하면 된다. 기존 백업해 둔 파일이 있는 경우 images 디렉토리와 LocalSettings.php 파일을 덮어 쓴다.

확장 및 스킨

확장 및 스킨은 미디어위키 설치 디렉토리에서 composer를 이용해 설치하거나, 각 디렉토리(extenstions, skins)에 직접 압축을 풀어 설치할 수 있다. 설치한 확장/스킨은 LocalSettings.php 파일에 등록하고 필요한 경우 추가 설정을 한 뒤 사용할 수 있다. 스킨의 layout처럼 별도 설정한 경우 사전에 따로 백업해 두어야 하고, 복원시 해당 디렉토리에 넣어 주면 된다.

개인적으로 사용 중인 확장
  • Bootstrap
  • BetaFeatuers
  • DarkMode
  • Popups
개인적으로 사용 중인 스킨
  • chameleon
    • layouts/private.xml 별도로 사용 중

마무리

미디어 위키 설치 디렉토리 내 모든 파일 소유권을 www-data:www-data로 변경하고, 미디어위키 디렉토리의 권한을 g+w로 변경한다.

이후 관련 서비스를 재시작하고 접속 해 보면 미디어위키가 뜬다. 복원한 경우 기존과 동일하게 뜬 것을 확인할 수 있다.

sudo systemctl restart php<version>-fpm
sudo systemctl restart nginx

Orange Pi Zero Plus 2 H5 armbian 설치

Orange Pi Zero Plus 2 H5 armbian 설치

현재 armbian에서 Orange Pi Zero +2 H5는 공식 지원하지 않는다. armbian에서 공식 지원하지는 않지만, 이 보드의 binary 이미지는 armbian 최신 소스에서 계속 빌드 해 제공해 주고 있다. 링크에서 Orange Pi Zero Plus 2를 찾으면 ubuntu 기반 안정/최신 버전, debian 기반 안정/최신 기반 cli 이미지 총 4개가 등록되어 있어 원하는 이미지로 다운 받을 수 있다. 이후 etcher 같은 툴을 이용해 microSD에 이미지를 써서 장치를 부팅 시키면 armbian이 부팅하는 것을 볼 수 있을 것이다.

eMMC로 설치

nand-sata-install

armbian에서 제공하는 위 스크립트를 실행하면 현재 microSD에 있는 armbian을 보드에 내장되어 있는 eMMC로 모두 옮길 수 있다. 실행 시점에 microSD에 있는 시스템이 그대로 옮겨진다. 따라서 eMMC로 옮긴 이후에도 microSD에서 각종 프로그램 설치, 설정한 내용들을 그대로 사용할 수 있다.

2019년 5월 2일 목요일

Archlinux 설치

Archlinux 설치

Archlinux 설치

이 문서는 개인 백업 성격이 강한 문서로, laptop에 아치 리눅스를 설치하는 과정 및 개인적으로 설치한 패키지들의 리스트를 정리해 둔 문서이다.

설치 환경

  • ASUS UX390UAK
    • Intel Core i7-7500U
    • DDR3 16GB
    • NVME 512GB
    • Intel HD Graphics 620
    • Windows 10 과 병용
    • UEFI secure boot OFF

설치 준비

인터넷 연결

# CLI 창에서 AP를 선택해 접속
wifi-menu

파티션

# 옛날엔 fdisk만 주구장창 썼는데 써보니 cfdisk가 편함
cfdisk /dev/nvme0n1

설치 환경에서의 파티션 테이블은 다음과 같이 두었다.

장치 타입 크기 포맷 리눅스에서 사용
/dev/nvme0n1p1 Windows 복원 환경 499 MB NTFS X
/dev/nvme0n1p2 EFI 시스템 100 MB FAT32 /boot
/dev/nvme0n1p3 Windows 예약 16 MB X
/dev/nvme0n1p4 Windows 127.4 GB NTFS X
/dev/nvme0n1p5 Linux Data 325 GB Btrfs /
/dev/nvme0n1p6 Linux Swap 24 GB swap swap

포맷

# 주 파일 시스템은 Btrfs
mkfs.btrfs /dev/nvme0n1p5
# Swap 파티션 생성
mkswap /dev/nvme0n1p6
# Swap 파티션 사용
swapon /dev/nvme0n1p6

마운트

# 주 파일 시스템을 먼저 마운트
mount /dev/nvme0n1p5 /mnt
# /boot 디렉토리를 생성하고
mkdir /mnt/boot
# EFI system 파티션을 /boot에 마운트
mount /dev/nvme0n1p2 /mnt/boot

미러 리스트 수정

# Pacman의 미러 리스트를 직접 수정한다.
vim /etc/pacman.d/mirrorlist

한국 서버를 맨 위로 옮긴다. 단, KAIST FTP 서버는 403 error가 발생하므로 옮길 필요 없다.

기본 패키지 설치

# Arch linux 설치
pacstrap /mnt base base-devel

설치 후 환경 설정

마운트 테이블 생성

# 현재 마운트 정보를 /etc/fstab에 저장
genfstab -U /mnt >> /mnt/etc/fstab

루트 변경

arch-chroot /mnt

호스트 네임 설정

# 네트워크 상 다른 컴퓨터에 보여질 이름
echo JGAHN-UX390UAK > /etc/hostname

로케일 설정

/etc/locale.gen 파일의 en_US.UTF-8ko_KR.UTF-8을 주석 해제한다.

vim /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf

시간 설정

echo Asia/Seoul > /etc/timezone
hwclock --systohc --local
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

루트 패스워드 설정

passwd

사용자 추가

useradd -m -G users,wheel -s /bin/bash dubhe
passwd dubhe
visudo

visudo 실행해 sudoers 파일의 %wheel ALL=ALL 항목을 주석 해제

부트로더 설치

GRUB

pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch --recheck
grub-mkconfig -o /boot/grub/grub.cfg
bootctl --path=/boot install

부트 로더 설정 파일 생성

vim /boot/loader/loader.conf

파일 내용

default Arch
editor 1
timeout 3

엔트리 파일 생성

vim /boot/loader/entries/arch.conf

파일 내용

title Archlinux
linux /vmlinuz-linux
initrd /initramfs-linux.img

마지막 option은 따로 추가한다.

echo "options root=PARTUUID=$(blkid -s PARTUUID -o value /dev/nvme0n1p5) rw" >> /boot/loader/entries/Arch.conf

네트워크 프로그램 설치

pacman -S networkmanager dialog

위 둘을 설치해 두면 재부팅 후 wifi-menu 명령으로 인터넷 연결 가능

정리 후 종료

# chroot 종료
exit
# /mnt의 모든 마운트 해제
umount -R /mnt
# 재시작
reboot

GUI 설치

wayland 설치

sudo pacman -S wayland wayland-protocols

GNOME 설치

sudo pacman -S gdm gedit gnome-calculator gnome-calendar gnome-characters gnome-clocks gnome-color-manager gnome-contacts gnome-control-center gnome-disk-utility gnome-font-viewer gnome-keyring gnome-menus gnome-session gnome-settings-daemon gnome-shell gnome-shell-extensions gnome-system-monitor gnome-terminal gnome-weather mousetweaks mutter nautilus accerciser dconf-editor gnome-code-assistance gnome-nettool gnome-tweaks gnome-usage nautilus-sendto sysprof network-manager-applet gnome-bluetooth
sudo systemctl enable gdm
sudo systemctl enable NetworkManager
sudo reboot

여기서 gnome-terminal 패키지는 추후에 gnome-terminal-transparency 패키지를 설치하며 삭제하였다.

AUR helper

yay

git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

장치 설정

인텔 마이크로 코드

sudo pacman -S intel-ucode
sudo grub-mkconfig -o /boot/grub/grub.cfg

부트로더 엔트리 파일에 마이크로 코드를 initrd로 추가해 주어야 정상적으로 로드 된다.

sudo vim /boot/loader/entries/arch.conf

파일 내용

...상략
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
하략...

블루투스

sudo pacman -S bluez bluez-utils
sudo systemctl enable bluetooth

그래픽카드

sudo pacman -S mesa xf86-video-intel vulkan-intel

사운드

sudo vim /usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common

위 파일에서 [Element PCM] 항목을 찾아 앞뒤로 각각 [Element Master][Element LFE] 항목을 다음과 같이 추가해 준다. 이는 UX390의 surround sound 하드웨어 때문에 필요한 설정이다.

[Element Master]
switch = mute
volume = ignore

[Element PCM]
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right

[Element LFE]
switch = mute
volume = ignore

지문 인식

sudo pacman -S fprintd

GDM을 사용하므로 별도 다른 설정은 필요하지 않다. 지문 등록도 fprintd-enroll을 실행해도 되지만, 그냥 GNOME의 설정 창의 사용자 계정 패널에서 등록 가능하다. 단, 윈도우즈 10과는 다르게 그냥 손가락을 대고 있는 것이 아니라, 센서에 지문을 문질러야 인식 된다.

전원 관리

sudo pacman -S tlp tlp-rdw
yay -S tlpui-git
sudo systemctl enable NetworkManager-dispatcher
sudo systemctl enable tlp
sudo systemctl enable tlp-sleep

Appendix

전체 설치 패키지 설치 목록

패키지 이름 설명 비고
grub GNU GRand Unified Bootloader 2
efibootmgr Tool to modify UEFI Firmware Boot Manager Variables
networkmanager Network connection manager and user applications
dialog A tool to display dialog boxes from shell scripts
wayland A computer display server protocol
wayland-protocols Specifications of extended Wayland protocols
gdm Display manager and login screen
gedit GNOME Text Editor
gnome-calculator GNOME Scientific calculator
gnome-calendar Simple and beautiful calendar application designed to perfectly fit the GNOME desktop
gnome-characters A character map application
gnome-clocks Clocks applications for GNOME
gnome-color-manager GNOME Color Profile Tools
gnome-contacts Contacts Manager for GNOME
gnome-control-center GNOME’s main interface to configure various aspects of the desktop
gnome-disk-utility Disk Management Utility for GNOME
gnome-font-viewer A font viewer utility for GNOME
gnome-keyring Stores passwords and encryption keys
gnome-menus GNOME menu specifications
gnome-session The GNOME Session Handler
gnome-settings-daemon GNOME Settings Daemon
gnome-shell Next generation desktop shell
gnome-shell-extensions Extensions for GNOME shell, including classic mode
gnome-system-monitor View current processes and monitor system state
gnome-weather Access current weather conditions and forecasts
mousetweaks Mouse accessibility enhancements
mutter A window manager for GNOME
nautilus Default file manager for GNOME
accerciser Interactive Python accessibility explorer for the GNOME desktop
dconf-editor dconf Editor
gnome-code-assistance Code assistance services for GNOME
gnome-nettool Graphical interface for various networking tools
gnome-tweaks Graphical interface for advanced GNOME 3 settings (Tweak Tool)
gnome-usage GNOME application to view information about use of system resources
nautilus-sendto Easily send files via mail
sysprof Kernel based performance profiler
network-manager-applet Applet for managing network connections
gnome-bluetooth The GNOME Bluetooth Subsystem
firefox Standalone web browser from mozilla.org
firefox-i18n-ko Korean language pack for Firefox
thunderbird Standalone mail and news reader from mozilla.org
thunderbird-i18n-ko Korean language pack for Thunderbird
bluez Daemons for the bluetooth protocol stack
git the fast distributed version control system
ttf-d2coding D2Coding Fixed Width TrueType fonts AUR
ttf-nanum Nanum series TrueType fonts AUR
ibus Next Generation Input Bus for Linux
ibus-hangul Korean input engine for IBus
google-chrome The popular and trusted web browser by Google (Stable Channel) AUR
code The Open Source build of Visual Studio Code (vscode) editor
enpass-bin A multiplatform password manager AUR
mesa An open-source implementation of the OpenGL specification
xf86-video-intel X.org Intel i810/i830/i915/945G/G965+ video drivers
vulkan-intel Intel’s Vulkan mesa driver
gvfs-google Virtual filesystem implementation for GIO (Google Drive backend)
tumbler D-Bus service for applications to request thumbnails
totem Movie player for the GNOME desktop based on GStreamer
gimp GNU Image Manipulation Program
gthumb Image browser and viewer for the GNOME Desktop
gnome-backgrounds Background images and data for GNOME
tlp Linux Advanced Power Management
tlp-rdw Linux Advanced Power Management - Radio Device Wizard
tlpui-git A GTK-UI to change TLP configuration files easily. It has the aim to protect users from setting bad configuration and to deliver a basic overview of all the valid configuration values. AUR
gnome-terminal-transparency The GNOME Terminal Emulator, with background transparency AUR
chrome-gnome-shell Native browser connector for integration with extensions.gnome.org
qogir-gtk-theme-git Qogir is a flat Design theme for GTK AUR
intel-ucode Microcode update files for Intel CPUs
ms-office-online Microsoft Office Suite Online AUR
evolution Manage your email, contacts and schedule for test
xdg-user-dirs-gtk Creates user dirs and asks to relocalize them
gtk-theme-adwaita-tweaks Tweaks to improve the default GNOME experience. AUR
minicom A serial communication program
alsa-utils An alternative implementation of Linux sound support
fprintd D-Bus service to access fingerprint readers

Gnome extensions

  • Appfolders Management extension: 앱 화면에 폴더 사용
  • Removable Drive Menu: USB 장치 메뉴
  • Remove Dropdown Arrows: 상단 바의 세모 표시 없앰
  • User Themes: 유저 영역에서 테마 설치

Thunderbird extensions

  • Lightning: 달력과 할 일 목록 제공. 기본으로 깔려 있지만 언어가 안 바뀐다. 따로 설치하면 된다.
  • Provider for Google Calendar: 구글 캘린더와 연동

Google Chrome 바로가기

Google Chrome에서 바로가기를 생성할 수 있다. 크롬 메뉴(우상단 점 3개)에서 *도구 더보기 → 바로가기 만들기···*를 선택하면 해당 페이지에 대한 링크가 아이콘과 함께 생성된다. 웹 앱들이 발전하면서 이런 식으로 링크를 걸어 사용할 일이 더욱 많아질 것 같아 이 문서에 남겨둔다. 생성된 링크 파일은 ~/.local/share/applications/ 아래에 chrome-<app-id>-<profile-dir>.desktop 형태로 저장된다. 이렇게 생성한 앱들은 크롬의 앱 창에도 등록이 되어 있다.
삭제는 크롬 앱 창에서 해당 앱을 삭제하면 추가로 물어보는 창이 있다. 같이 삭제 해 주면 GNOME의 앱 메뉴에서도 삭제된다.

기타 개인 설정

Bash 설정

vim ~/.bashrc

파일 내용 수정

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

# Prompt
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\>[\033[00m\]\$ '

if [ -x /usr/bin/dircolors ]; then
	test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi

# Alias
alias ls='ls --color=auto'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias vi='vim'
alias grep='grep --color=auto'

if [ -d "$HOME/.local/bin" ]; then
	export PATH=$HOME/.local/bin:$PATH
fi
if [ -d "$HOME/bin" ]; then
	export PATH=$HOME/bin:$PATH
fi

Vim 설정

vim ~/.vimrc

파일 내용

set tabstop=4
set shiftwidth=4
set visualbell
set nobackup
set cindent
set autoindent
set smartindent
set incsearch
set ruler
set number
syntax on
filetype on
set backspace=eol,start,indent

Git 설정

vim ~/.gitconfig

파일 내용

[user]
   name = <이름>
   email = <이메일>
[core]
   editor = vim
   autocrlf = input
[merge]
   tool = vimdiff

2019년 3월 28일 목요일

No hash found for gcc error

No hash found for gcc

No hash found for gcc

Buildroot에서 빌드 하다가 ERROR: No hash found for blabla.. 하는 에러가 발생하면, 해당 패키지의 hash 파일이 실제로 파일이 아니라 다른 곳의 symbolic link가 아닌지 확인하자. 특히 GCC.

방금 buildroot를 새로 받아 빌드 하다 발생한 문제인데, 도중에 무슨 문제가 있었는지는 모르겠지만 symbolic link가 깨지는 문제가 발생했다.

모르고 있다가 툴체인 빌드 하다가 알게 되었는데, 에러 메시지는 정확하진 않지만 다음 내용이 포함되어 있었다.

ERROR: No hash found for gcc-8.3.0.tar.xz

이 문제를 처음 봤을 때 깊게 보지 않고 그냥 단순히 빌드 루트 문제인가? 싶어서 git pull도 해보고 git status도 해봤지만 origin/master와 같다는 대답만 돌아오길래 버그 리포트나 할까 싶었는데… 일단 좀 더 찾아보기로 했다.

해당 메시지는 support/download/check-hash에서 출력하지만 그 파일의 문제는 아닌 것 같고 해서 인터넷을 좀 더 찾아 보니 symbolic link의 문제라는 것을 보았다.

Symbolic link는 단순히 가리키는 파일의 위치가 적혀있는 텍스트 파일에 불과하므로 git에서는 이게 링크인지 그냥 파일인지 구분 없으니 같다고 나왔던 것 이다.

그래서 문제의 디렉토리(package/gcc)에서 보니 gcc.hash파일이 보였다.

GCC는 두 번 빌드해야 하므로 하위 디렉토리에 gcc-initialgcc-final 디렉토리가 있었고, 각각에 gcc-initial.hashgcc-final.hash 파일이 보였다. 두 파일 크기는 모두 11 Byte. 딱 ../gcc.hash 라는 텍스트의 크기와 같은 크기였다. 두 파일 다 내용은 역시나 ../gcc.hash

# in buildroot_dir/package/gcc
rm gcc-initial/gcc-initial.hash
rm gcc-final/gcc-final.hash
ln -s ../gcc.hash gcc-initial/gcc-initial.hash
ln -s ../gcc.hash gcc-final/gcc-final.hash

각각 삭제하고 다시 링크를 건 뒤 다시 빌드 하니 잘 동작한다. 심볼릭 링크가 이렇게 골탕 먹일 줄은 생각도 못했다.

2019년 3월 27일 수요일

Allwinner H5 Memory Mapping

Allwinner H5 Memory Mapping

Allwinner H5 Memory Mapping

Module Address (for Cluster CPU) Size (byte)
N-BROM 0x0000 0000—0x0000 7FFF 32K
S-BROM 0x0000 0000—0x0000 FFFF 64K
SRAM A1 0x0001 0000—0x0001 7FFF 32K
SRAM C 0x0001 8000—0x0003 3FFF 112K
SRAM A2 0x0004 4000—0x0005 3FFF 64K
DE 0x0100 0000—0x013F FFFF 4M
Coresight Debug 0x0140 0000—0x0141 FFFF 128K
CPU MBIST 0x0150 2000—0x0150 2FFF 4K
CPU CFG 0x0170 0000—0x0170 03FF 1K
System Control 0x01C0 0000—0x01C0 0FFF 4K
DMA 0x01C0 2000—0x01C0 2FFF 4K
NFDC 0x01C0 3000—0x01C0 3FFF 4K
TSC 0x01C0 6000—0x01C0 6FFF 4K
Key Memory Space 0x01C0 B000—0x01C0 BFFF 4K
TCON 0 0x01C0 C000—0x01C0 CFFF 4K
TCON 1 0x01C0 D000—0x01C0 DFFF 4K
VE 0x01C0 E000—0x01C0 EFFF 4K
SMHC 0 0x01C0 F000—0x01C0 FFFF 4K
SMHC 1 0x01C1 0000—0x01C1 0FFF 4K
SMHC 2 0x01C1 1000—0x01C1 1FFF 4K
SID 0x01C1 4000—0x01C1 43FF 1K
Crypto Engine 0x01C1 5000—0x01C1 5FFF 4K
MSG_BOX 0x01C1 7000—0x01C1 7FFF 4K
SPINLOCK 0x01C1 8000—0x01C1 8FFF 4K
USB-OTG_Device 0x01C1 9000—0x01C1 9FFF 4K
USB-OTG_EHCI0/OHCI0 0x01C1 A000—0x01C1 AFFF 4K
USB-HCI1 0x01C1 B000—0x01C1 BFFF 4K
USB-HCI2 0x01C1 C000—0x01C1 CFFF 4K
USB-HCI3 0x01C1 D000—0x01C1 DFFF 4K
SMC 0x01C1 E000—0x01C1 EFFF 4K
CCU 0x01C2 0000—0x01C2 03FF 1K
PIO 0x01C2 0800—0x01C2 0BFF 1K
TIMER 0x01C2 0C00—0x01C2 0FFF 1K
OWA 0x01C2 1000—0x01C2 13FF 1K
PWM 0x01C2 1400—0x01C2 17FF 1K
KEYADC 0x01C2 1800—0x01C2 1BFF 1K
I2S/PCM 0 0x01C2 2000—0x01C2 23FF 1K
I2S/PCM 1 0x01C2 2400—0x01C2 27FF 1K
I2S/PCM 2 0x01C2 2800—0x01C2 2BFF 1K
Audio Codec 0x01C2 2C00—0x01C2 33FF 2K
SPC 0x01C2 3400—0x01C2 37FF 1K
THS 0x01C2 5000—0x01C2 53FF 1K
UART 0 0x01C2 8000—0x01C2 83FF 1K
UART 1 0x01C2 8400—0x01C2 87FF 1K
UART 2 0x01C2 8800—0x01C2 8BFF 1K
UART 3 0x01C2 8C00—0x01C2 8FFF 1K
TWI 0 0x01C2 AC00—0x01C2 AFFF 1K
TWI 1 0x01C2 B000—0x01C2 B3FF 1K
TWI 2 0x01C2 B400—0x01C2 B7FF 1K
SCR0 0x01C2 C400—0x01C2 C7FF 1K
SCR1 0x01C2 C800—0x01C2 CBFF 1K
EMAC 0x01C3 0000—0x01C3 FFFF 64K
HSTMR 0x01C6 0000—0x01C6 0FFF 4K
DRAMCOM 0x01C6 2000—0x01C6 2FFF 4K
DRAMCTL0 0x01C6 3000—0x01C6 3FFF 4K
DRAMPHY0 0x01C6 5000—0x01C6 5FFF 4K
SPI0 0x01C6 8000—0x01C6 8FFF 4K
SPI1 0x01C6 9000—0x01C6 9FFF 4K
SCU 0x01C80000
GIC_DIST: 0x01C80000 + 0x1000
GIC_CPUIF: 0x01C80000 + 0x2000
CSI 0x01CB 0000—0x01CF FFFF 320K
De-interlacer 0x01E0 0000—0x01E1 FFFF 128K
TVE 0x01E4 0000—0x01E4 FFFF 64K
GPU 0x01E8 0000—0x01EA FFFF 192K
HDMI 0x01EE 0000—0x01EF FFFF 128K
RTC 0x01F0 0000—0x01F0 03FF 1K
R_TIMER 0x01F0 0800—0x01F0 0BFF 1K
R_INTC 0x01F0 0C00—0x01F0 0FFF 1K
R_WDOG 0x01F0 1000—0x01F0 13FF 1K
R_PRCM 0x01F0 1400—0x01F0 17FF 1K
R_TWD 0x01F0 1800—0x01F0 1BFF 1K
R_CPUCFG 0x01F0 1C00—0x01F0 1FFF 1K
R_CIR-RX 0x01F0 2000—0x01F0 23FF 1K
R_TWI 0x01F0 2400—0x01F0 27FF 1K
R_UART 0x01F0 2800—0x01F0 2BFF 1K
R_PIO 0x01F0 2C00—0x01F0 2FFF 1K
R_PWM 0x01F0 3800—0x01F0 3BFF 1K
DDR 0x4000 0000—0xFFFF FFFF 3G

Allwinner H5 Boot Diagrams

Allwinner H5 Boot Diagrams

Allwinner H5 Boot Diagrams

개요

  • The system will boot in different ways based on whether its security features are enabled
  • Supports CPU-0 boot process and CPU-0+ boot process
  • Supports super standby wakeup process
  • USB OTG로 업그레이드 지원
  • Raw NAND, eMMC, SD/TF card ,and SPI NOR Flash에서 fast boot 지원

Normal Mode

아래 그림에서 CPU-0+는 CPU-0를 제외한 나머지 CPU들, 즉 CPU-1, CPU-2, CPU-3를 말한다.

CLUSTER 0 && CPU-0
Others
Hot Plug
Others
SS
Pass
No Pass
Others
unselected
selected
pass
No Pass
Pass
CPU-0 Boot
Read
CLUSTER ID
&& CPU ID
CPU-0+ Boot
Read
Hot Plug
flag
Boot from CPU-0+
Read
SS flag
Check SS
restore code
Run SS Restore
Fast Boot
process
UBOOT_SEL
Mandatory
Upgrade Process
Mandatory
Upgrade finishes
Run Boot0

전체 과정을 설명하면,

  1. Cluster ID와 CPU ID 체크
    • 둘 중 하나라도 0이 아니면 CPU-0+에서 부팅 수행
  2. Hot Plug 플래그 확인
    • Hot Plug이면 CPU-0+에서 부팅 수행
  3. SS 플래그 확인
    • 있으면 SS 복구 코드 확인
      • 통과 시 SS 복구 시작
      • 실패 시 Fastboot
  4. UBOOT_SEL
    • 선택되면 upgrade process
  5. Fastboot
    • 실패 시 upgrade process
  6. BOOT0 시작

Security Mode

전체 과정은 Normal Mode 와 같고, 마지막 6번 과정에서 BOOT0를 실행하는 대신 Security BROM을 실행한다.

CLUSTER 0 && CPU-0
Others
Hot Plug
Others
SS
Pass
No Pass
Others
unselected
selected
pass
No Pass
Pass
CPU-0 Boot
Read
CLUSTER ID
&& CPU ID
CPU-0+ Boot
Read
Hot Plug
flag
Boot from CPU-0+
Read
SS flag
Check SS
restore code
Run SS Restore
Fast Boot
process
UBOOT_SEL
Mandatory
Upgrade Process
Mandatory
Upgrade finishes
Run Security BROM Software

CPU-0+ Boot Process

CPU-0+에서 부팅할 때는 BROM이 CPU-0+ Boot Pointer에 지정된 multi-core system firmware 주소로 JUMP해서 실행시킨다.

yes
no
CPU-0+ Boot starts
Read CPU_ID
CPU_ID > 0?
Read 0x01F0 1C00 + 0x1A4 register
Get soft_entry_address
Run cpu0 code
Jump to the soft_entry_address
Run CPU-0+ code

CPU Hot Plug Process

Hot Plut 비트는 hot plug boot를 할지 결정한다.

yes
no
CPU0 Hot Plug starts
Read 0x01F0 1C00 + 0x1AC register
Get the value
0xFA50 392F ?
Read 0x01F0 1C00 + 0x1A4
Get hot_plug_entry_address
Jump to the hot_plug_entry_address
Run CPU0 code

Super Standby Wakeup Process

SS wakeup은 CPU-S에서 시작되고, CPU-0가 해제되면 CPU-0로 옮겨진다.

CPU-S starts the Super Standby wakeup process
DRAM exit Self refresh - optional
Move the BOOT0 code to SRAM A1 0x00
Release CPU-0 reset
CPU-0 boot

Mandatory Upgrade Process

시스템이 강제 업그레이드 과정으로 진입할지 결정할 때 UBOOT_SEL이 low면 이 프로세스로 진입한다.

Mandatory Upgrade starts
USB FEL
Mandatory Upgrade finish

Fast Boot Normal Process

시스템이 강제 업그레이드 과정으로 진입할지 결정할 때 UBOOT_SEL이 high면 이 프로세스로 진입한다.

pass
not pass
pass
not pass
pass
not pass
pass
not pass
pass
not pass
Fast boot process starts
SDC0 Boot
Operation
EMMC2 Boot
Operation
SDC2 Boot
Operation
NAND Boot
Operation
SPI_NOR Boot
Operation
Run BOOT0 Code
Mandatory Upgrade Process

Fast Boot Security Process

시스템이 강제 MP 프로세스로 진입할지 결정할 때 UBOOT_SEL이 high면 이 프로세스로 진입한다.

pass
not pass
pass
not pass
pass
not pass
pass
not pass
pass
not pass
Right
Wrong
Fast boot process starts
SDC0 Boot
Operation
EMMC2 Boot
Operation
SDC2 Boot
Operation
NAND Boot
Operation
SPI_NOR Boot
Operation
Run the TOC Certification
Read Security BROM Software in TOC
Check
Run Security BROM Software Code
Normal_fel