ARM 아키텍처의 동작 시작

- 전원 인가시 리셋 벡터 메모리 주소 0x00000000의 명령 실행

 

 

시작점 만들기

- boot 폴더에 Entry.S 파일 만들고 다음과 같이 작성

- .text는 .end까지 텍스트 섹션을 의미

- .code는 명령어 크기가 32비트를 의미

- .global은 C언어의 extern 역활 => vector_start, vector_end 주소를 외부에서 읽기 가능

- MOV R0, R1 : R1을 R0에 담고

- .space 1024, 0 : 해당 위치부터 1024바이트를 0으로 채우기

 

* hexdump 데이터를 16진수로 표현

컴파일 및 핵스 덤프보기

- arm-none-eabi-as : 어셈블리어 소스 파일 컴파일

- armv7 아키텍처 coretex-a8 코어 cpu(RealViewPB)로 Entry.S의 목적파일을 만듬

- 목적파일에는 심벌 정보를 포함하여 objcopy로 바이너리만 추출 -> hexdump로 바이너리 확인

- 0001 e1a0는 MOV R0, R1

 

 

실행파일 ELF 만들기

- 실행 파일을 만들려면 목적 파일과 링커 필요, 링커에 정보를 전달하는 링커 스크립트 필요

*  운영체제는 링커스크립트제공하나 펌웨어 개발시에는 펌웨어 동작 HW에 맞게 펌웨어 섹션 배치 필요

 

링커 스크립트

- ENTRY 지시어 : 심벌 지정, 1번 줄에선 vector_start 심벌 지정

- SECTION 지시어 : 섹션 배치 설정 정보

- .=0x0 : 첫섹션이 메모리 0x00000000에 위치

- .text : 텍스트 섹션 베치 순서 정보, vector_start 심벌이 나온 후 .text 섹션 배치

- 그 뒤 data 섹션과 bss 섹션 메모리에 배치

 

실행파일 만들기

- arm-none-eabi-ld에 -n 옵션(섹션 자동정렬 no), -T(링커 스트립트 지정), -nostdlib(표준라이브러리 링킹x)

  -> 링킹 결과 navilos.axf 생선

- arm-none-eabi-objdump -D로 디스어셈블 한 결과

 ->  vector_start가 0x00000000에서 시작하며, mov r0, r1 명령어(기계어로 e1a0 0001)가 잘 들어가 있음

 

 

 

QEMU에서 실행하기

-M으로 realview-pb-a8 기계 지정

-kernel로 실행할 elf 지정

-S는 실행하자마자 정지

-gdb tcp::1234,ipv4는 gdb와 연결하도록 소켓 포트 지정

* gdb로 동작하는지 메모리확인하기 위함

 

 

gdb 사용하기

arm-none-eabi-gdb가 안보여서 그냥 gdb-multiarch를 사용했다.

첫 바이트에 0xe1a00001이 나오고 그 뒤에는 0x00000000이 쭉 나오니 잘 올라갔다.

 

 

빌드 자동화 Makefile 작성폴더의 

- 11번 줄 : boot폴더의 *.S 파일들 모두 ASM_SRCS에 담기

- 12번줄 : boot 폴더의 *.S 파일들을 .o로 바꾸고 디렉터리도 build로 변경 + 기존의 ASM_SRCS들

- 33 ~ 35번줄 : navilos.axf, navilos.bin 생성

- 37 ~ 39번줄 : *.S를 *.o로 컴파일

 

빌드 및 실행하기

- 빌드한 결과 build 폴더에 목적 파일과 실행파일이 위치

- make debug로 qemu 실행하며 디버깅 준비

 

나빌로스

- 이만우님이 교육용으로 만든 간단한 RTOS

 

 

교차 컴파일러 설치하기

- navilos는 우분투에서 개발해서 ARM 아키텍처에서 사용하며 GCC로 컴파일 할 예정

- 교차 컴파일러 예시 : gcc의 arm 아키텍처 - 플랫폼은 linux/none - eabi 타입은 android/gnu 등

gcc-arm-linux-androideabi

gcc-arm-linux-gnueabi

gcc-arm-none-eabi

-> 리눅스에서 돌릴게 아니므로 gcc-arm-none-eabi 선택

 

ABI

 application binary interface라는데 설명봐도 영 무슨말인지 이해가 잘안되지만 API가 코드에서 어떻게 호출할지 쓰는거니 바이너리 단위로 어떻게 호출해서 쓰는게 아닌가 싶다.

 

 

교차 컴파일러 설치하고

 

ARM 아키텍처 가상화를 위해 qemu도 설치하면 끝

 

버전은 4.2.1

사용가능 기기가 많은데 realview-pb-a8 사용

 

 

 

 

ABI 다시 정리

- 아래의 링크를 보니 window로 컴파일한 실행파일(바이너리)을 linux에선 사용불가

- 바이너리가 호환가능하면 다른 플랫폼에서도 사용가능

- API에선 함수에 매개변수를 어떻게 넣으면 되는지 정의하나 ABI는 인자를 register나 stack 어디에 넣으면 되는지 정의

 

ref : https://velog.io/@ellyheetov/ABI%EB%9E%80

지난주 일요일 집에 돌아오고나서 밀린일 하느라 계속 공부를 하질 못했는데

어제 밤이 되서야 오랜만에 책좀 읽었다.

 

이번에는 네트워크 원리에 대해서 원래 어느정도 알고는 있었지만

복습도하고 놓친부분을 채우려고 계속 볼 생각을했지만 그동안 영 의욕이 생기질 않아 하질 못했는데 어쨋든 봤다.

 

먼저 그림으로 배우는 네트워크 원리를 보면서

기존의 네트워크 관련 서적이 너무 어렵게 써져 있어서 이해하기가 어려운 부분들을 꽤 깔끔하게 정리해주었다.

내용은 잘 생각 나지는 않지만 인터페이스랑 물리/데이터링크 계층에 대해서는 좀 더 명확하게 이해했는데

 

인터페이스는 서로 다른 장치간에 만나는 부분 혹은 포트라고도 하고, (이부분은 TCP의 포트랑 좀 햇갈리긴했지만)

물리 계층은 물리적으로 연결되어 데이터를 전기적신호로 보내고 받는부분

데이터 링크 계층은 같은 네트워크 내에 MAC 인터페이스 간 연결? 정도 였던거같고,

 

모두의 네트워크 같은 경우에는

두 화자간에 대화하는 형태로 내용이 서술되어 있어서

읽다가 갑자기 내용이 확 뛰어넘어서 뭔가 싶을 순간들이 있지만

화자간의 대화라 그런가 내용의 흐름들이 앞에서 부터 읽었다면 따라가기 좋게 됬던거같다.

 

이 책에서 조금 더 명확하게 이해한게

HTTP 버전과 허브, 스위치인데

HTTP 1.0은 3way handshake를 각 프레임마다 하는 문제가 있었지만

HTTP 1.1에서는 keep alive 데이터를 전송할때 모든 프레임들을 보낼때까지 연결을 유지하도록 해서 3way handshake를 반복을 하지 않게하고

HTTP 2.0의 경우 전송을 순서대로 하다보니 순서가 늦은 데이터는 앞의 데이터 전송이 끝날떄 대기하는걸 방지하도록 모든 데이터의 프레임들을 같이 보내도록 순서를 조정했던것 같다.

 

그동안 계속 허브, 스위치가 햇갈렸는데

허브 : 물리적인 연결, 모든 연결된 호스트에 전달, 목적지가 아닌데도 보낸다 = 바보 허브/더미 허브

스위치 : MAC 주소 테이블, 주소 테이블이 없을땐 전체 보내서 만든후, 데이터를 허브와 달리 목적지에만 보내준다.

라우터 : 라우팅 테이블만들어서 전달?

 

 

충돌 방지 프로토콜

- CSMA/CD : 송신자 감지 다중 접속/충돌 감지?, 이더넷, 라우터에서 알아서 해준다.

- CSMA/CA : 송신자 감지 다중 접속/충돌 회피?, Wifi

 

공유기

- 라우터 + 스위치 + 무선 엑세스 포인트

 

무선 엑세스 포인트

- 인프라 스트럭쳐 모드 : 엑세스포인트를 중심으로 통신?

- 에드훅 모드 : 무선 장치간 1:1 통신

 

 

 

몇개 더 이해한게 있긴한데 대충 보면서 이거라도 더 알아먹은게 어딘가싶다.

'책 & 영상' 카테고리의 다른 글

전자정복  (0) 2023.08.27
이노베이션신화의 진실과 오해  (0) 2023.08.27
한동안 임베디드는 글럿다..  (0) 2022.06.20
책) 알기쉽게 배우는 AVR ATMEGA 128  (0) 2022.06.19
유튜버 포프TV  (0) 2022.06.12

기계 모션의 종류

ref : https://m.blog.naver.com/dailylaboratory/221690928856

 

 

기계 모션

- Rigid 접합 : 두 컴포넌트 접합

- Revolute : 하나의 축을 기준으로 회전

- Slider : 하나의 축으로 양쪽 반복 이동

- Cylindrical : 하나의 축에서 회전과 양쪽반복/직선운동

- Pin-slot : 회전축과 이동방향의 축을 다르게 움직임

- Planer : 지정한 스냅 포인트를 따라 평면 위에서 회전과 이동

- Ball : 두 축에서 반복/직선 이동하고, 하나의 축에서 회전


Revolute

Slider

Cylindrical

pin-slot

planer

ball

 

기계 요소의 운동

- 캠 : 회전 + 직선 운동

- 크랭크 : 회전 + 상하, 좌우 2축 직선/왕복 운동

- 링키지 Linkage : 회전 운동 힘이 연쇄적으로 전달됨

- 기어 : 회전 운동, 톱니 수에 따라 회전력

- 레칫 : 회전 운동 + 속도에 따라 탄성력

 



크랭크

링키지

기어

레칫

 

크랭크와 캠

- 크랭크 CRANK : 회전 운동 <-> 왕복 운동으로 변환하는 기계장치. ex) 자동차 엔진, 자전거 페달

- 캠 CAM : 회전-왕복 운동하도록 윤곽이나 홈을 가진 장치. ex) 장난감, 내연기관


크랭크, https://steemit.com/kr/@skan/3


캠, https://mechengineering.tistory.com/376

 

링크와 오토마타

- 링크 : 여러 링크를 연결해 운동하게하는 장치 ex) 옷걸이, 와이퍼, 우산

- 오토마타 : 스스로 움직이는 기계


링크,
https://blog.naver.com/PostList.naver?blogId=moonbummo

오토마타,
https://tenor.com/view/automata-art-horse-gallop-crank-gif-13854153

 

 

제품 개발 과정 : 아이디어 -> 설계 -> 제작 -> 양상 -> 판매

1. 아이디어

2. 설계

  - 2D 디자인 : 일러스트레이터, AutoCAD

  - 3D 디자인 : 2D 스캐치로 모델링 생성, 제조 시 문제점 파악 가능

3.제작

 - 주조 : 재료를 녹여 액체 상태를 형(틀, 거푸집)에 부어 굳히는 방법

 - 시제품 : 개발중인 제품 성능 검증, 개선을 위해 제작

4. 양산

 - 대량 양산

 

 

 

재료

- 원자재, 부품

- 종류 : 금속, 세라믹, 폴리머, 반도체

- 특성 : 기계적, 광, 열, 자성, 전기적 특성

- 연성 재료 : 구부려지는 재료(like 호박엿), ex) 연강, 알루미늄, 구리, 납 등

- 취성 재료 : 구부리면 부서지는 재료(like 가락엿) ex) 주철, 콘크리트, 돌, 유리, 세라믹

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=studycadcam&logNo=220623648870 

재료의 종류 ref : https://nabi29.tistory.com/3

 

 

 

장력과 응력

- 장력 Tension : 끈, 케이블을 당기는 힘 강도

- 응력 stress : 압축, 인장, 굽힘, 비틀림 등 외력(하중)을 가할때 재료에서 생기는 저항

ref : https://boxplanet.tistory.com/84

 

토크와 마찰력

- 토크 : 물체를 회전시키는 물리량, T = F x L

- 마찰력 Frictional Force : 접촉한 두 물체사이에 운동을 방해하는 힘



마찰력과 외력
http://www.tslining.co.kr/tech1_friction_ratio_n_wear_rate/



토크, https://ericlab.tistory.com/47

 

 

허용공차

- 부품 제작 시 허용되는 치수 범위 오차

ref :  https://3dplife.tistory.com/101

조인트를 이용한 부품 고정

- 비영구적 :  볼트, 못, 자석, 케이블 타이 등

- 영구적 : 접착제, 리벳, 에폭시, 용접

 

 

영구적인 조인트

- 분리할 필요없는경우 사용

- 접착제 : 본드, 에폭시, 깨끗한 표면에 써야함

- 목재 접착제 : 나무조각 결합용

- 에폭시 : 플라스틱, 금속 등 접착에 사용

- 플라스틱(아크릴) 접착제 : 플라스틱이 화학적으로 반응 후 접착

- 용접  : 금속에 열과 압력으로 고체끼리 결합하는 방법



가스 용접,https://catcom.tistory.com/355

아크용접, https://www.deca-corn.com/89

- 브레이징 : 브레이징재를 녹여 접합. 원재료 변형 최소화

- 납땜 soldering : 주석, 납을 인두기로 녹여 접합, 전기부품 or 전선 연결 시


브레이징(경납땜), https://m.blog.naver.com/sp_ht/220624807303

솔더링(연납땜), https://colomy.tistory.com/113

 

베어링

- 회전축과 지지대사이에 마찰 줄여줌. 접촉면 사이에 윤활유가 있음

- 접촉방식에 따른 분류 미끄럼 베어링, 구름 베어링

- 하중 방향 분류 : 레디얼 베어링(축과 직각 방향 하중), 스러스트 베어링(축과 같은방향), 리니어 베어링(직선운동)

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nissei-gtr&logNo=221749665265 

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=horimsaw&logNo=221700781970 

 

스프링

- 에너지를 흡수하여 완충 작용하는 기계 요소

- 압축 스프링(볼펜, 안장), 인장/확장 스프링(완력기), 비틀림스프링(집게), 스파이럴 스프링(시계,태엽)

ref: https://terms.naver.com/entry.naver?docId=1117497&cid=40942&categoryId=32353 

 

 

 

 

결합용 기계요소

볼트, 너트

- 볼트 : 너트로 체결, 렌치 사용

- 나사(스크류) : 너트없이 박음, 드라이버 사용

ref : https://www.tjlituo.com/whats-the-difference-between-bolts-and-screws/

 

볼트

- 부품 고정에 사용

- 탭 : 암나사를 만드는 공구로 나사를 만드는데 사용.

- 관통 볼트 : 구멍을 뚫고 너트로 조임

- 탭 볼트 : 몸체에 암나사를 깍아 쥘수 있게 만든 볼트

- 스터드 볼트 : 봉에 나사를 깍은 볼트

ref : https://3dplife.tistory.com/193

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kwshop89&logNo=220186983742 

- 외경 : 탭부분의 직경

- 피치 : 나사 골과 골 혹은 산과 산사이의 거리

 ex) M8x1.25 (외경 8, 피치 1.25)

ref : https://mr.kikni.com/tip/8395

- 볼트 머리 종류

ref : https://coocatia.tistory.com/123

 

- 머리 파기 : 볼트가 튀어나와 외관상이나 타 부품과 간섭, 외부로부터 충격을 방지하기 위해 머리자리를 팜

 ex) 카운터 보어(육각머리일때 자주씀), 카운터 싱크(접시 머리 flat일때 종종 사용)

* 암나사, 수나사

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kanon929&logNo=221126901574 

 

 

와셔, 리벳

- 와셔 : 볼트 구멍이 볼트 지름보다 훨씬 크거나 너트 풀어짐 방지할때 사용

- 리벳 : 금속 재료를 영구적으로 결합할떄 쓰는 막대 모양 요소

ref : https://terms.naver.com/entry.naver?docId=1714914&cid=49056&categoryId=49056 

ref : https://terms.naver.com/entry.naver?docId=1089528&cid=40942&categoryId=32351 

 

지난번에 NAND2TETRIS를 쭉 훑어보고 나서

계속 OS만들어보고 싶었는데 영 의욕이 생기지가 않았다.

 

그렇게 책을 찾아보다가 관심가는 책을 찾았는데

한승훈 저자님의  64비트 멀티코어 OS 원리와 구조 라는 책이다.

http://jsandroidapp.cafe24.com/xe/

https://github.com/kkamagui/mint64os-examples

 

 

책 두권 합쳐서 3000page 정도 되는데

개발환경 구축 부터가 심상치가 않다.

 

 

지금처럼 WSL이 제공되지 않던 시절에

윈도우에서 리눅스 환경을 제공해주는 cygwin을 설치하면서

추가로 설치가능 목록들이 있는데 저자분이 어떤걸 설치해야하는지 알려주시지만 적지는 않다

 

책에서는 시그윈x86을 기준으로 얘기하고 있으나

사이트에서 다운받아도 실행되지않아

중간에 잘못될수 있으나 그냥 x86_64 용으로 다운받아서 진행했다.

 

 

설치 완료 후

교차 컴파일러 만들기전에 환경변수를 설정해야한다고 하는데

64비트용 시그윈을 다운받았으니 

환경변수 이름이 조금 다른건 고려해서 설정해줬다.

 

시그윈 바이너리 경로는 그렇다쳐도

문제는 교차컴파일러 바이너리 파일 경로인데

usr 폴더에 cross는 없고 대신 i686과 x86_64가 보인다.

 

i686이 뭔고 하니 i386 그러니까 32비트랑 동일한 의미라고 하는데

지금 64비트 운영체제를 만드는거니 x86_64-pc-시그윈의 바이너리 폴더를 환경변수에 등록해서 써봐야겠다.

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=cestlavie_01&logNo=40208336534

 

 

시그윈 설치하고, 필요한것도 다운받았겠다.

gcc 설치 확인을 하려고 시그윈 터미널을 키고

gcc -v로 확인했더니 방금 환경변수로 지정한 경로의 gcc가 잘 실행된듯하다.

 

그런데 시그윈 실행한건 좋은데 홈디렉토리가 이상하게 Roaming의 카덴스사 관련 폴더로 지정되어있었다.

 

 

 

시그윈 터미널에서 계속 작업하지는 않을테니 그냥 넘어가고 gcc 빌드 테스트해보면

64비트용은 잘 빌드가 되는데

 

32비트로는 빌드를 실패했다.

 

 

내가 x86_64용 gcc를 썻기 때문인거같은데,

-m64, -m32가 뭐하는건지 찾아보니 32비트, 64비트 환경에 맞게 빌드하는걸로 같아보인다.

https://stackoverflow.com/questions/40612218/whats-the-differences-between-m32-m64-and-nothing-in-gccs-options

 

원래는 32, 64비트 둘다로 빌드할수 있어야하는데, 잘못된걸 골라서 이런듯하다.

싶다가 깃헙 다큐먼트 보다가 뭔가 잘못된거같다 싶더니

 

괜히 cygwin 붙은걸 설치한거같다.

다시 binutils와 gcc-core를 설치하고 도 그렇지만

내가 아무 생각이 없었나보다

 

어짜피 교차 컴파일러 만들건데

원래 책 내용대로 따라가면 /usr/cross에 이미 설치가 되는건지

아니면 교차컴파일러를 만들어서 해당 경로에 만들어진건지

 

 

아무튼 바이너리 유틸즈 만들기부터하면

x86이니 x86_64니 gcc니 하는걸 지금까지 너무 안한게 후회되면서도  뭐가뭔지 모르겠지만

 

타겟이랑, 프리픽스 설정해서 컨피그를 하려했지만

설정이 되지 않았다.

알고보니 엉뚱한 디렉토리에서 했더라

 

 

 

깃헙에서 말하는것과는 다르지만 경로이동해서 설정 진행하자

여기서 사용한 configure가 뭔가 싶긴한데

autoconfig랑 관련있는거같다.

 

어짜피 개발 환경이야 64비트에서 하고 타겟은 똑같으니 상관없겠거니해서 그냥 진행했다.

 

 

중간에 사진찍지 않아서 놓쳤는데

 

깃헙에 나온 내용데로 진행해서 바이너리 유틸즈 빌드랑 인스톨까지 마쳤고,

 

gcc도 x86_64-pc-linux로 타겟 설정해서 빌드하는데

바이너리 유틸즈도 한참걸렷지만

GCC는 장난아니게 오래걸려서 그냥 중지하고 내일 마저 진행해야되겠다.

 

 

 

 

 

 

 

 

QEMU는 저자분이 올리신 옛날버전으로 설치하고, 

잘 찾아보면 qemu 테스트용 리눅스 커널을 실행시켜볼수 있다.

 

그리고 개발환경 툴로

이클립스도 설치하고 끝

https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2022-06/R/eclipse-cpp-2022-06-R-win32-x86_64.zip 

지난번에 엉성하게나마 atmega328p-pu를 이용한 보드를 만들었다.

보드를 만들었다 치고나서 외형이 필요한데

어떻게 시작해야할지 잘 감이 안잡히더라

 

기어, 볼트, 너트, 프레임 같은게 필요할거같은데

영 시중에는 내가원하는 책이 잘 보이지 않았다.

 

이런게 결국 오토마타에 대한 내용이니 이거에 관한 동영상강의 찾다보니

마침 gcamp에서 퓨전 360을 이용한 오토마타는 물론 강의를 많이 올려놓으셧더라

 

그래서 이걸 주제로 준비해보려고 한다.

 

 

기계 매커니즘과 요소

- 기계의 운동 : 직선, 회전, 복합 운동

- 기계 요소

  결합 요소 : 나사, 키, 핀 등 체결하는데 사용하는 부품

  전동 요소 : 회전축, 마찰자, 벨트 풀리, 기어 등 동력을 전달하는 부품

  축 요소 : 축, 베어링 등 축을 연결하거나 지지하는 요소

  관 요소 

  제어 요소

ref : https://terms.naver.com/entry.naver?docId=1070606&cid=40942&categoryId=32351 

 

레버(지렛대)

- 작은 힘으로 큰 힘을 내어 운동

ref : https://terms.naver.com/entry.naver?docId=506582&cid=42380&categoryId=42380 

 

 

 

 

 

기계의 전동 요소(폴리-벨트, 스프로킷-체인, 기어)

- 풀리 : 운동, 힘을 전달하기위해 벨트를 거는 축바퀴

- 두 축에 달린 풀리에 벨트를 걸어 동력 전달

ref : https://terms.naver.com/entry.naver?docId=720443&cid=42319&categoryId=42319 

- 스프로킷 : 회전 축에 고정, 체인의 마디에 끼워 회전시키면 동력이 전달

   -> 미끄럼없이 큰 동력이 전달가능하나 소음이 크다.

 ex : 자전거 패달

ref :  https://terms.naver.com/entry.naver?docId=923359&cid=47326&categoryId=47326 

-기어 : 2개 또는 이상의 축간에 회전/동력을 전달하는 장치로 힘을 확대, 축소, 회전 방향이나 속도 등 조절

ref : https://terms.naver.com/entry.naver?docId=923125&cid=47326&categoryId=47326 

 

 

 

 

 

 

기어의 종류

- 스퍼기어(평기어) : 두 축에 평행하게 나란히 있는 기어

- 랙과 피니언 : 회전운동을 직선운동으로 변환하는 기어

ref : https://terms.naver.com/entry.naver?docId=1264624&cid=40942&categoryId=32335 

ref : https://terms.naver.com/entry.naver?docId=1617556&cid=50321&categoryId=50321 

- 베벨 기어 : 회전 방향을 직각으로 변환

- 웜 기어 : 두 축이 직각이더라도 동일한 방향이 아닌경우 동력 전달하며 감속용

ref : https://terms.naver.com/entry.naver?docId=1101373&cid=40942&categoryId=32354 

ref : https://terms.naver.com/entry.naver?docId=412755&cid=42327&categoryId=42327 

- 아이들러기어 : 두 개의 메인 기어 사이에 설치해서 위치를 조절하거나 회전방향을 반대로 할때 사용하는 기어

ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=blueletteru&logNo=221583952679 

+ Recent posts