” [환경변수] : 프로세스가 컴퓨터에 동작하는 방식에 영향주는 동적인 값들, 시스템의 기본정보 저장, 환경변수는 자식프로세스에 상속(시스템변수/사용자변수)
ㄴ변수명/값으로 구성, %변수명% 식으로 사용
ㄴ변수 값 확인 : CLI→DOS/WIN→cmd에서 echo %path% or Unix/Linux→Shell에서 echo $path
ㄴ변수 값 설정 : CLI→DOS/WIN→cmd에서 SET변수=값(SET만쓰면 전체조회) or Unix/Linux→Shell에서 env, set, printenv등(단독사용시 전체조회)
/— 리눅스기반 디바이스드라이버 실습 —/
디렉토리 //파란글씨 또는 d
일반파일 //하얀글씨 또는 -
단축아이콘 //l
권한 //r읽기,w쓰기,x실행 또는 접근, 앞에서부터 3글자씩 소유자/소유그룹/전체
<Shell script>
vim 설치후(구버전 vi로 실행해도됨)... vim <파일이름>.sh 로 생성, i/esc로 vim편집기, :wq!저장
#!<사용할 쉘> (보통 #!/bin/sh)
cat으로 코드 확인, chmod 755 <스크립트.sh>로 쓰기권한 제한
./스크립트.sh로 실행
사칙연산명령어 expr <숫자1> <연산자> <숫자2> (각요소간 띄어쓰기, 곱하기는 \*)
- gt //( > )...이항조건
- lt //( < )...이항조건
- eq(숫자),=(문자) //( == )...이항조건
- ne(숫자),!=(문자) //( != )...이항조건
- e //파일존재시 참...단항조건
- d //디렉토리존재시 참...단항조건
$# //특별변수, 스크립트에 전달된 명령줄 인자 갯수
<gcc컴파일러 명령어>
sudo apt install build-essential //설치: gcc (ld링커포함)
gcc -c *.c //소스코드를 목적파일(.o)로 변환
gcc *.c -lm //라이브러리math
gcc *.c -lm -v //gcc 동작 옵션 자세히 보기 ...컴파일러가 링킹 자동으로 처리하는 것 확인 가능(그럼에도 불구하고 수동링킹 for점진적빌드)
ld *.o //라이브러리 사용시 lib 부분 떼고 -l 붙여서 사용
ld *.o /usr/lib/x86_64-linux-gnu/crt1.o -lm -lc -dynamic-linker=/lib64/ld-linux-x86-64.so.2 //다이나믹링커 설정
ㄴ/lib64/ld-linux-x86-64.so.2 //일반적인 GNU C라이브러리의 다이나믹링커(LD) 위치
ㄴ/usr/lib/x86_64-linux-gnu/crt1.o //프로그램 시작시 초기화 코드를 포함하는 오브젝트파일(엔트리포인트설정), main함수제어전 필요환경구축
/usr/lib,/usr/lib/x86_64-linux-gnu //라이브러리기본위치
libm //수학 math.h
libz //압축 zlib.h
libpthread //스레드 pthread.h
libstdc++ //C++ 기본라이브러리
ldd <실행파일 또는 라이브러리> //의존성있는 라이브러리를 보여줌
<Makefile변수>
<변수이름> := <값> //변수에 값을 할당 (=는 변수의 최종값, :=현재값)
<변수이름> += <값> //변수에 값을 추가
<변수이름> ?= <값> //변수가 선언되지않았다면 값할당(기본값 주기 좋음)
<변수이름> : <값> //변수 사용시
$@ //현재타겟이름
$< //의존성각각하나
$^ //의존성전체
<환경 및 툴체인준비 git..Rootfs..kernel..QEMU>
sudo apt-get install gparted //설치:용량관리프로그램
sudo apt-get install git //설치:깃
git clone git://git.vuildroot.net/buildroot //설치:빌드루트
cd buildroot
ls configs
make qemu_aarch64_virt_defconfig
sudo apt-get install libncurses-dev
make menuconfig
system configuration > init system > systemd
kernel > 이따를 위해 비활성황
target packages > text editors and viewers > vim
target packages > libraries > crypto > openssl support + openssl binary
filesystem images > exact size (128M)
host utilities > 체크전부해제
cat /proc/cpuinfo | grep processor | wc -l //또는 nproc --all
make -j8 //확인한 cpu갯수만큼
rootfs.ext2 생성되면 성공
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git //설치:리눅스커널
sudo apt-get install bison flex libelf-dev libssl-dev //설치:라이브러리
cp ~/buildroot/board/qemu/aarch64-virt/linux.config ~/linux/arch/arm64/configs/qemu_defconfig
~/linux$ ARCH=arm64 make qemu_defconfig //QEMU위한 arm64아키텍쳐 커널 빌드 명령
developer.arm.com/tools and software/GNU Toolchain > download (A휴대폰 Embedded소형기기) > gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz //설치:A-profile
~/linux$ ARCH=arm64 CROSS_COMPILE=/home/milkywaygod2/gcc폴더/bin/aarch64-none-linux-gnu- make -j8 //~~ ~~=<절대경로> make -j코어갯수
sudo apt install qemu-system-arm //설치:에뮬
<qemu실행>
qemu-system-aarch64 \ //가상화실행
- kernel linux/arch/arm64/boot/Image \ //빌드한커널지정
- drive format=raw,file=buildroot/output/images/rootfs.ext4,if=virtio \ //사용할가상디스크,빌드한 루트파일시스템지정
- append "root=/dev/vda console=ttyAMA0 nokaslr" \ //부팅시 전달파라미터설정(루트파일시스템위치,콘솔출력장치,KASLR커널주소공간레이아웃랜덤화)
- nographic -M virt -cpu cortex-a72 \ //그래픽,메인보드(머신타입),CPU
- m 2G -smp 2 //메모리,코어수
- s -S //(선택)디버그모드
초기로그인root
uname -a //현재버전확인
kill -9 qemu-system-aarch64
shutdown -h now //종료