728x90

 

 이번 장에서는 비행체에 작용하는 힘과 모멘트를 다루려고 합니다. 이 힘과 모멘트는 주로 중력, 항공역학적힘, 추진력에 의해 작용하게 돕니다. $F_g$는 중력에 의한 힘, ($f_a, m_a$)는 항공역학적 힘과 모멘트, ($f_p, m_p$)는 추진력에 의한 힘과 모멘트가 됩니다. f를 비행체에 작용하는 힘의 총합, m은 모멘트 총 합이라면 다음과 같이 정리 할수 있습니다.

  이 장에서 힘과 모멘트 각각에 대해 설명할 것이며 4.1장에선 중력, 4.2장에서는 항공역학적 힘과 토르크, 4.3은 추진에 의한 힘과 모멘트, 4.4장에서는 대기 요란 atmospheric disturbance을 다루겠습니다.

 

4.1 중력

 기체에 작용하는 중력은 질량의 크기에 비례하도록 설계할 수 있습니다. 이 힘은 $k^i$ 방향으로 작용하며 중력 상수 g와 기체의 질량에 비례하게 됩니다. 기체 좌표계 $F^v$ 상에서 중력은 질량의 중심에 작용하며, 다음 처럼 나타 낼 수 있습니다.

 이 식은 3장에서 본 뉴턴의 제 2법칙에 따라 동체 좌표계 상으로 정리해야 하며, 중력을 동체 좌표계의 요소로 정리하면 다음과 같습니다.

 

4.2 항공역학적 힘과 모멘트

 비행체가 대기를 지나가면서, 그림 4.1처럼 몸체 주위로 압력 분포가 나타나게 됩니다. 비행체에 작용하는 압력의 크기와 분포가 대기 속도와 대기 밀도, 고도로 이루어진 함수가 됩니다. 이 때 작용하는 압력은 $\frac{\rho }{V_a^2}$가 되며, $\rho$는 대기 밀도, $V_a$는 대기상 비행체의 속도 입니다.

그림 4.1 압력 분포

 이 처럼 날개 주위의 압력 분포 특성을 정리하는것 보다 일반적인 접근 방법은 이 압력에 의한 힘과 모멘트의 영향을 정리하면 됩니다. 예를 들어 $i^b$-$k^b$으로 이루어진 종방향에서는 동체에 작용하는 압력들로 양력 lift force, 항력 drag force, 모멘트가 있습니다. 그림 4.2처럼 양력과 항력은 항공역학적 중심이라 할수 있는 날개 현의 1/4 지점 quater-chord point에서  작용하게 됩니다.

그림 4.2 압력 분포의 영향. 양력과 항력, 모멘트로 나타낼 수 있음. 

 이 때, 양력과 항력, 모멘트는 다음과 같이 정리 할 수 있는데

 

 여기서 $C_L, C_D, C_m$은 무차원 항력계수 nondimensional aerodynamic coefficients, S는 비행체 날개 면적, c는 날개 현 길이의 평균이 됩니다. 양력, 항력, 피칭 모멘트는 날게의 형태와 레이놀드 수, 마하 수, 받음각에 크게 영향을 받게 됩니다. 소형 비행체 주위에 일정한 대기 속도가 작용하면 레이놀드 수와 마하 수의 영향은 상수가 됩니다. 이후에는 받음 각 $\alpha$와 sideslip $\beta$, 각 속도 p, q, r, 제어면 control surface 접힘정도에 의한 영향을 살펴보겠습니다.

 

 이렇게 항공역학적인 힘과 모멘트를 다룰때 종방향과 횡방향으로 분해해서 다루는게 일반적이고, 종방향의 힘과 모멘트는 피치 평면이라 부르는 $i^b$-$k^b$ 평면에서 작용하며, $i^b$, $k^b$ 방향으로 작용하는 양력과 항력같은 힘과 $j^b$축 방향으로 작용하는 모멘트로 이루어 집니다. 측면에 대한 힘과 모멘트는 $j^b$ 방향으로 작용하는 힘과 $i^b$, $k^b$ 축에 대한 모멘트로 이루어 집니다.

 

4.2.1 제어면

 항공역학적 힘과 모멘트에 대한 상세한 방정식을 다루기 전에, 비행체 조종에 사용되는 제어면 control surface에  대해 알아봐야 합니다. 제어 면은 항공역학적인 힘과 모멘트를 바꾸는데 사용하며, 일반적인 비행기의 경우 제어면으로 엘리베이터 elevator, 에일러론 aileron, 러더 rudder가 있으며 다른 비행체의 경우 스포일러와 플랩, 카나드 등이 있지만 이 책에서 다루지는 않지만 비슷하게 설계할 수 있습니다.

일반적인 비행기의 제어면. 에일러론은 롤각 제어에, 엘리베이터는 피치각 제어, 러더는 요각 제어에 사용됩니다.

 그림 4.2은 일반적인 비행기의 경우를 보여주며, 에일러론 접힘 aileron deflection은 $\delta_a$, 엘리베이터 접힙 elevator deflection은 $\delta_e$, 러더 접힘 rudder deflection은 $\delta_r$로 표기합니다. 제어면의 양방향 접힘은 제어면의 힌지 축에서 오른손 규칙을 따르며, 엘리베이터의 힌지 축은 동체 $j^b$축과 나란하므로 오른손 법칙에 따라 엘리베이터가 아래로 내려갈때 양의 접힘값을 가지게 됩니다. 비슷하게 러더가 왼쪽으로 향할때 양의 접힘이 됩니다. 마지막으로 에일러론 접힙 $\delta_a$는 접힘값을 정리하여 다음과 같이 구할 수 있습니다.

그러므로 양의 $\delta_a$는 왼쪽 에일러론이 내려가고 오른쪽 에일러론이 올라갈때 생기게 됩니다.

 

4.2.2 종방향 항공역학

 종방향 항공역학적 힘과 모멘트는 피치 평면인 $i^b$-$k^b$에서 작용하며, 양력과 항력, 피치 모멘트 처럼 친숙한 요소들입니다. 양력과 항력을 정의하면 그림 4.2에서 안정성 좌표계의 축과 나란하게 작용하며, 벡터에서 볼때 피치 모멘트는 안정성 좌표계의 $j^s$축과 나란하게 됩니다.

 

 양력과 항력, 피치 모멘트는 받음각에 크게 영향을 받는데, 피치 속도 q와 엘리베이터 접힘 $\delta_e$ 역시 종방향 힘과 모멘트에 영향을 줍니다. 이 개념들을 정리해서 양력과 항력, 피치 모멘트에 대한 $\alpha$, q, $\delta_e$의 함수로 아래와 같이 정리 할 수 있습니다.

 보통 이러한 힘과 모멘트 방정식은 비선형이며, 받음각이 작은 경우, 날개 주위의 대기 히름이 평평하게 됩니다. 이런 상태에서 양력과 항력, 피치 모멘트는 선형 추정으로 적당히 정확하게 모델을 만들수 있게 됩니다. 양력에 대한 방정식의 경우 1차 태일러 급수 추정 first order taylor series approximation으로 다음과 같이 정리 할 수 있습니다.

 여기서 $C_{L0}$는 $\alpha$ = q = $\delta_e$ = 0 일 때 $C_L$ 값으로, 선형 추정의 편미분을 무차원화할때 사용됩니다. $C_L$과 $\alpha$, $\delta_e$는 차원이 없으므로, $\frac{C_L}{\delta q}$만 무차원화가 필요합니다. q의 단위는rad/s 이므로, 정규화 시키기 위해 $\frac{c}{2 V_a}$를 사용하여 식 4.2를 다음과 같이 다시 정리할 수 있습니다.

 위 식의 계수들은 아래와 같으며 무차원의 크기를 나타냅니다. 

 $C_{L_{\alpha}}$, $C_{L_{q}}$는 안정성 미분 계수이며, $C_{L_{\delta_{e}}}$여기서 미분 계수는 테일러 급수 추정에서 편미분 요소로 구하며, 이와 같은 방식으로 항력과 피치 모맨트 선형 추정을 구할 수 있습니다. 

 식 (4.3), (4.4), (4.5)는 종방향 항공역학적 모델의 기반이 되며, 받음각이 작은 상태일 때는 힘과 모멘트를 정밀하게 구할 수 있습니다. 이 때 기체 주위로 층류가 흘러 주위 대기 흐름이 안정적으로 흐르게 되어 받음각이나 피치 속도 엘리베이터 접힘 크기가 변하더라도 대기 흐름을 예측 할 수 있고, 신뢰할수 있게 됩니다. 불안정 상태의 특징으로 비선형이고, 3차원, 시변, 큰 흐름의 변화가 있습니다.

 

 기체 제어시 MAV 개발자는 받음 각이 높은 겨우와 각속도가 큰 경우와 같은 두 불안정 한 경우를 고려해야 하여야 합니다. 가장 중요하게 고려야해하는 불안정 현상으로 스톨이 있으며, 스톨은 받음 각이 증가하여 대기의 흐름이 나눠질 때 발생하여 양력을 급격히 떨어트립니다. 

 

그림 4.6 위의 그림은 일반 대기 흐름 상태(층류). 아래의 그림은 받음각이 높아 날개가 스톨 상태

 

 스톨 상태에서 식 (4.3), (4.4), (4.5)로 구한 추정 값은 매우 위험할 수 있는데, 날개 주위에서의 스톨 현상은 그림 4.6와 같습니다. 받음각이 작으면 날계 주위의 대기가 안정적이지만, 받음각이 스톨 한계 각 critical stall angle을 넘기면 대기의 흐름나 분산되면서 동요를 일으키며 양력이 급격히 떨어지게 됩니다.

 

 받음각이 계속 증가할 때 양력이 증가하는걸로 예측하는것은 물리적으로 비현실입니다. 여거 설명하는 동역학 모델은 스톨의 영향 또한 종방향 역학 모델에 포함시키는 것이 중요합니다.

 

 날개 스톨을 추가 하기 위해선 받음각에 대해 양력과 항력이 비선형이 되도록 식 (4.3), (4.4)를 바꾸어야 합니다. 이러면 더 넓은 범위의 $\alpha$에서 양력과 항력을 구하는 모델이 되며 아래와 같습니다.

 이 때, $C_L$, $C_D$는 받음각 $\alpha$에 대한 비선형 함수가 되어, 받음 각이 스톨 상태를 넘어갈때 날개는 거칠게 동작하지만 양력 계수는 아래의 식으로 모델링 할수 있습니다.

 대부분의 시뮬레이션에서는 특정 상황에 대해 높은 정확성을 요구하지 않기 때문에 이정도의 스톨 영향을 반영하는게 적당합니다. 선형 양력과 스톨의 영향을 합친 양력 모델은 다음 처럼 정리할 수 있습니다.

 위 식에서 M과 $\alpha_{0}$은 양의 상수이고, 식 (4.10)에서 시그모이드 함수는 $\alpha_{0}$에서 컷오프하고 이동 비율 M으로 만들어 집니다.

 그림 4.7은 식 (4.9)에서 $C_{L0}$ + $C_{L_{\alpha}}$ $\alpha$를 이용하여 구한 양력 계수와 식 (4.8)에서 구한 평판에서의 양력 계수가 됩니다. 소형 비행체에서 선형 양력 계수는 아래와 같이 정리 할수 있는데, 이 때 AR = $b^2$/S는 날개의 종횡 비, b는 날개 길이, S는 날개 면적이 됩니다.

그림 4.7        받음각에 대한 양력계수(실선), 받음각에 대한 선형 추정(점 실선), 평평한 양력 계수(점선)

 

 항력 계수 $C_D$도 받음각에 대한 비선형 함수로 항력과 기생 항력 parastic drag를 발생시킵니다. 기생 항력이란 날개와 다른 요소로 발생하는 항력으로 대략적인 상수 값이 되며 $C_{D_p}$로 표기합니다. 받음 각이 작을 때 항력은 양력의 제곱에 비례하며, 항력과 기생 항력을 다음과 같이 정리할 수 있습니다.

 

 위 식에서 e는 오즈왈드 값 oswald efficency factor로 0.8 ~ 1.0 사이 값을 가지게 됩니다.

 

 그림 4.8은 받음 각에 대한 항력 계수의 이차/선형 모델을 보여주는데, 이차 모델이 받음각에 대해 정확하게 항력을 모델링 할 수 있습니다. 선형 모델은 비행기가 아래를 향하여 받음각이 음수가 되면 항력을 음수로 잘못 예측하게 됩니다.  기생항력 $C_{D_p}$와 구분하자면, 기생 항력은 양력이 0일때의 항력 계수 $C_{D_0}$와 같습니다. 파라미터 $\alpha^*$와 $C_D^*$는 $C_D$가 선형화되어 $\alpha$=$\alpha^*$인 지점에서의 받음각과 항력 계수가 됩니다.

 

 이차 모델은 넓은 범위의 받음각의 영향을 정밀하게 나타낼수 있으나 선형 모델이 간편하고 일반적인 비행상태의 경우 정확하므로 주로 사용되기도 합니다.

 

 

그림 4.8 받음각에대한 항력 계수. 선형/이차 모델

 

 식 (4.6)과 (4.7)에서의 항력과 양력은 안정성 좌표계에서 표현하며, 동체 좌표계에서 나타내기 위해 받음각으로 회전이 필요합니다.

  함수 $C_L$($\alpha$), $C_D$($\alpha$)는 식 (4.9), (4.11)에서 나타낸 비선형 함수로 구한 힘 모델이며, 단순한 모델이 필요하다면 아래와 같은 선형 계수 모델을 사용할수 있습니다.

 비행체의 피칭 모멘트는 받음각에 대한 비선형 함수이고, 시뮬레이션 용도로 다음의 선형 모델을 사용하겠습니다.

 

 

4.2.3 횡방향 항공역학

 횡방향 힘과 모멘트는 측면 $j^b$ 방향에 대한 평행 이동과 롤과 요가 변하는 회전 운동을 일으킵니다. 이때 횡방향 항공역학은 사이드 슬립 각 $\beta$에 크게 영향을 받으며, 롤 변화율 p, 요 변화율 r, 에일러론 접힘 $\delta_a$와 러더 접힘 $\delta_r$ 등의 영향을 받습니다. 측면 힘을 $f_y$, 롤과 요 모멘트를 각각 l과 n이라고 한다면. 다음의 식으로 정리할 수 있습니다.

 여기서 $C_Y$, $C_l$, $C_n$는무차원항공역학적계수이며,b는날개 길이가 됩니다. 종방향 항공역학적 힘과 마찬가지로  $C_Y$, $C_l$, $C_n$는 $\beta$, p, r, $\delta_a$, $\delta_r$에 대한 비선형 함수 파라미터 들이나 특성을 정리하기 어려우무로 선형 모델을 사용하게 됩니다. 4.2.2장에서와 같이 1차 태일러 급수 추정과 항공역학적 계수의 무차원화 과정으로 측면 힘과 롤/요 모멘트를 아래와 같이 정리할 수 있습니다.

 이러한 힘과 모멘트는 동체 좌표계의 축과 나란하게 작용하여 회전 변환이 필요하지는 않습니다.

300x250
728x90

 

 

 MAV의 비행, 가이드, 제어기 개발을 위해 가장 먼저 해야할 일은 동역학적 모델을 구하여야 합니다. 비행체의 비선형 운동방정식을 정리하여야 하는데 이 내용을 3장과 4장에서 다룰 것이고, 5장에서는 운동방정식을 선형화하여 제어기 설계에 알맞게 전달함수와 상태 공간 모델을 만들 것입니다.

 이번 장에서는 뉴턴의 법칙($f$=$m \dot{v}$)을 이용해서 강체의 기구학과 동역학적 표현들을 정리해봅시다. 여기서는 위치와 속도 사이의 관계(기구학)과 힘과 모멘트(동역학)을 정리할 것인데 힘과 모멘트 정리때는 항공역학적인 힘과 모멘트를 주로 다룰것입니다.

 

상태 변수

 MAV의 운동 방정식을 구하는데는 12개의 상태변수를 이용하게 됩니다. 여기서 평행 이동과 관련된 변수로 위치에 관한 변수 3개, 속도 변수 3개, 회전 운동에 대한 각자세와 각속도 상태 각각 3개가되어 총 12개의 상태변수가 존재하게 됩니다. 이 상태 변수의 목록은 아래의 테이블 1과 같습니다.

 

표 3.1 MAV 상태 변수들

이름 설명
$p_n$ 관성 좌표계 $F^I$ 상 축 $i^i$에 대한 북쪽 위치
$p_e$ 관성 좌표계 $F^I$ 상 축 $j^i$에 대한 동쪽 위치
$p_d$ 관성 좌표계 $F^I$ 상 축 $k^i$에 대한 아래 방향위치(고도의 음수)
$u$ 동체 좌표계 $F^b$ 상 축 $i^b$ 방향에 대한 속도
$v$ 동체 좌표계 $F^b$ 상 축 $j^b$ 방향에 대한 속도
$w$ 동체 좌표계 $F^b$ 상 축 $k^b$ 방향에 대한 속도
$\phi$ 기체 2 좌표계 $F^{v2}$에 대한 롤 각도
$\theta$ 기체 1 좌표계 $F^{v1}$에 대한 피치 각도
$\psi$ 기체 좌표계 $F^{v}$에 대한 해딩(요) 각도
$p$ 동체 좌표계 $F^b$ 상 축 $i^b$에 대한 롤 각도
$q$ 동체 좌표계 $F^b$ 상 축 $j^b$에 대한 롤 각도
$r$ 동체 좌표계 $F^b$ 상 축 $k^b$에 대한 롤 각도

 

그림 3.1 축과 운동들

 

 오일러각 롤 $\phi$, 피치 $\theta$, 요 $\psi$는 기체 2, 기체 1, 기체 좌표계 상에서 정의되며, 오일러 각은 기준 좌표계와 비교한 상대적인 크기일 뿐이므로, 각 속도 (p, q, r)을 각 크기($\phi$, $\theta$, $\psi$)인 의 시간에 대한 미분으로 구할수 없습니다. 하지만 아래의 내용에서는 시간에 대한 미분으로 가정해서 다뤄봅시다.

 

 

기구학

  비행체의 평행이동 속도는 일반적으로 동체 좌표계 상에서 각 축에 대한 속도 요소들로 나타냅니다. 즉, 속도 변수들인 u, v, w는 관성 좌표계상 속도이지만 동체 좌표계 $i^b$, $j^b$, $k^b$ 으로사영을 해서 표현하고, 반대로 평행이동 위치는 관성 기준 좌표계 상에서 나타나게 됩니다. 평행 이동 속도와 위치 사이 관계를 정리하기 위해선 다음과 같이 미분과 회전 행렬을 이용해서 정리할 수 있게 됩니다.

 

식 2.5를 이용하면 다음과 같이 정리할 수 있습니다.

 

위 식이 힘과 가속도를 고려하지 않은 기구학적 관계를 의미합니다.

 각 위치 $\phi$, $\theta$, $\psi$와 각 속도 p, q, r 사이의 관계를 살펴보면 서로 다른 좌표계 상에 정의됩니다. 각 속도는 동체 좌표계 $F^b$ 그리고, 각 위치(오일러 각)은 세 다른 좌표계 상에서 정의 되므로 동체 좌표계 상에서 속도 변수는 오일러각의 미분과 회전 행렬로 다음과 같이 정리하여 구할 수 있습니다.

 

이를 역으로 정리하면 p,q,r로 다음 처럼 각속도를 구할 수 있게 됩니다.

 

 

강체의 동역학

 비행체의 동역학 운동 방정식을 구하려면 뉴턴의 제 2법칙을 이용하여야 합니다. 우선은 평행 이동에 대한 3자유도를 보고나서 이후 회전 운동에 대한 자유도를 봅시다. 뉴턴의 법칙은 관성 기준 좌표계에에서 표현되는데, 즉 동체의 움직임은 고정된 좌표계 위에서 구하게 됩니다. 운동이 고정된 좌표계를 기준으로 하더라도 벡터를 다른 좌표계 상에서 나타낼 수도 있습니다. 대지 속도 벡터 $V_g$는 동체 좌표계에서 $V_g^b$ = $(u, v, w)^T$ 와 같이 일반적으로 나타 낼수 있으며 이는 동체 좌표계 상에서 땅에 대한 기체의 속도를 의미 합니다.

 

평행이동 운동

 뉴턴의 제2 법칙을 동체의 평행이동에 적용하면 다음과 같습니다.

 

 여기서 m은 비행체의 질량이며, $\frac{V_g}{d t_i}$는 관성 좌표계에서 시간에 대한 미분, f는 비행체에 작용하는 모든 외력의 합을 의미합니다. 이때 외력은 중력, 항공역학적인 힘, 추진력 들이 있습니다.

 관성계에 대한 시간의 미분을 동체 좌표계 상에서 시간에 대한 미분과 식 2.17을 이용해서 각 속도로 다음과 같이 다시 정리할 수 있습니다.

이 때 $\omega_{b/i}$는 관성 좌표계 상에서 비행체의 각속도로 식 (3.4), (3.5)를 합쳐 관성 좌표계 상에서 시간 미분으로 힘에 대한 식을 정리 할 수 있습니다.

비행체 제어의 경우에 대해서 뉴턴의 제 2법칙으로 동체 좌표계 상에 힘과 속도를 다음과 같이 표현할 수 있습니다.

여기서, $V_g^b$ = $(u, v, w)^T$, $w_{b/i}^{b}$ = $(p, q, r)^T$ 이며, 벡터 $f^b$는 동체 좌표계 상에서 정의되는 외력들의 합으로 $f^b$ = ($f_x$, $f_y$, $f_z$)$)^T$

 

 $\frac{\omega_{g}^{b}}{d t_b}$란 표현은 사람이 동체를 볼때 동체 좌표계 상에서 속도의 변화율로. u, v, w는 벡터 $ $i^b$ $, $k^b$축으로사영한것이므로 아래와 같이 정리 할수 있게 됩니다.

 식 (3.6)을 정리하면 결과적으로 다음의 식을 구할 수 있게 됩니다.

 

 

 회전 운동

 회전 운동에서 뉴턴의 제2법칙에 따라 다음의 식으로 나타낼수 있으며, 이때 h는 각 모멘텀, m은 작용하는 모멘트의 합이 됩니다.

 관성 좌표계 상에서 작용하는 각 모멘텀의 미분은 식 (2.17)으로 다음과 같이 정리 할 수 있는데

평행 이동 운동 처럼, 동체 좌표계 상에 나타내는것이 편리 합니다.

강체의 각 모멘텀은 관성 행렬 J와 각속도 벡터의 내적으로 구할수 있는데 

 

= J$\omega_{b/i}^b$

이 때 J는 다음과 같습니다.

 

J의 대각 성분은 관성 모멘트 moments of inertia라 부르며, 이 외 요소들을 관성 내적 products of inertia라 부릅니다. 관성 모멘트는 기체가 특정 축에 대해 회전 가속에 반대하는 힘을 의미합니다.

 

 식 (3.8)의 각 모멘텀 $를 정리하면 다음의 식을 구할 수 있습니다.

 위 식에서  J$\frac{\omega_{b/i}^{b}}{d t_b}$는 사람이 움직이는 동체를 볼때 동체 좌표계 상 각속도 변화율로, p, q, r 은 $\omega_{b/i}^{b}$의 축 $, $, $k_b$에 대한 사영이므로 아래 처럼 정리할수 있고,

식 (3.10)을 다시 정리하면 

비행체는 $, $ 축으로 이루어진 평면으로 대칭이기도 하므로 이 경우 $ = $J_yz$ = 0이 되어 관성 행렬 J는 다음 처럼 정리할 수 있습니다.

이러한 대칭 가정을 이용해서 γ = $J_z$ - $$로 가정할때,J의역행렬은아래와같습니다.

 

 결과적으로 식 (3.11)의 각 속도 변화율은 외력 $m^b$ = $과 관성 행렬 등을 이용해서 아래와 같이 정리할 수 있습니다.




 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

 무인 비행체 시스템을 배우는데 있어서 동체들이 서로 서로 비교할때 얼마나 다르게 방향을 향하는지 이해하는게 중요합니다. 정확하게 얘기를 하면 기체가 지구를 기준으로 어딜 향하는지 이해하여야 합니다. 또, 카메라 같은 센서가 깇체와 비교할때 어디를 향하고 있는지, 안태나가 신호와 얼마나 향하고 있는지도 알아야 합니다. 이번 장에서는 기체와 센서의 위치와 방향을 나타내는데 사용하는 다양한 좌표계 시스템과 이 좌표계들 간의 변환을 설명하고자 합니다. 서로 다른 여러 좌표계 시스템은 아래의 이유들로 반드시 사용해야 합니다

 

- 뉴턴의 운동 방정식은 고정된 관성 기준 좌표계 inertial reference frame에서 구하나, 운동은 동체 고정 좌표계 body-fixed frame 에서 나타내어야 합니다.

- 동체에 작용하는 항공역학적인 힘과 토르크는 동체 고정 기준 좌표계 body-fixed reference frame 에서 나타내기가 쉽습니다.

- 가속도계나자이로 같은 센서는 동체 좌표계에 대해서 정보를 측정합니다. 하지만 gps 같은 경우 관성 좌표계에 대해 위치와 대지 속도, 방위각을 측정합니다.

- 대부분의 임무에서는 비행 지점, 궤적 같은 것들이 필요하며 이들은 관성 좌표계에서 표현됩니다. 지도 정보들 또한 관성 좌표계에서 주어집니다.

 

 하나의 좌표계는 회전 rotation과 평행 이동translation 동작으로 다른 좌표계로 변환됩니다. 2.1장에서 회전 행렬과 좌표계 변환에서 사용하는 과정을 보여줄 것이고, 2.2장에서는 소형 비행체에서 사용하는 특정한 좌표계들을 설명하고자 합니다. 2.3장에서는 대기속도 airspeed와 대지속도 ground speed, 바람속도 wind speed와 이들 사이의 관계를 설명하고, 이들을 통해 2.4장에서 바람 삼각형 wind triangle에 대해 상세히 다루고자 합니다. 2.5장에서는 좌표계의 회전과 평행이동에서 백터 미분 표현을 설명하려고 합니다.

 

 

회전 행렬

 그림 2.1의 두 좌표계를 살펴 봅시다. 벡터 p는 $F^0$ 좌표계에서 $(i^0, j^0, k^0)$로 $F^1$ 좌표계에서는 $(i^1, j^1, k^1)$ 나타낼수 있습니다. $F^0$ 좌표계에서 벡터 $p$는

 

$p = p_x^0 i^0 + p_y^0 j^0 + p_z^0 k^0$

 

 

 

그림 2.1 2차원에서의 회전

 

 

$F^1$ 좌표계에서 벡터 $p$는 아래와 같습니다.

 

$p = p_x^1 i^1 + p_y^1 j^1 + p_z^1 k^1$

 

벡터 $(i^0, j^0, k^0)$와 $(i^1, j^1, k^1)$는 서로 직각이 되는 기저 벡터가 됩니다.

 

두 식이 같다고 하면 다음과 같이 정리 할 수 있게 됩니다.

 

 

양 쪽을 $i^1, j^1, k^1$로 내적을 구하면, 다음의 행렬이 만들어 집니다.

 

그림 2.1을 정리하여 다음의 식을 구할 수 있습니다.

 

$ p^1 = R_0^1 p^0  $                                                            (2.1)

 

 $R_0^1$이란 표기는 좌표계 $F^0$에서 $F^1$으로의 회전을 나타내며, 비슷하게 y축에 대한 좌표계의 오른손 회전으로 다음의 식을 구할 수 있습니다.

 

 

x축에 대한 오른손 회전 결과는 아래와 같습니다.

 

 

행렬 $R_0^1$은 일반적인 정규 직교 행렬로 다음의 성질들을 가지고 있습니다. (det는 행렬의 행렬식)

  

P.1.. $(R_a^b)^{-1} $ = $(R_a^b)^T $ = $R_b^a$

P.2. $R_b^c R_a^b$ = $R_a^c$

P.3. det($R_a^b$) = 1 

 

 

식 2.1로부터 벡터 $p$는 변하지 않으며, 새 좌표계 $R^1$는 $F^0$을 각 $\theta$ 만큼 오른손 회전하여 얻을 수 있다. 또한 회전 행렬로 벡터를 회전시킬수도 있다. 그림 2.2는 $F^0$에서 벡터 p를 $k^0$ 축에 대해 각 $\theta$만큼 왼손 회전한 결과를 보여준다. 

 

그림 2.2 k^0축에대한  p의 회전

 

벡터 p와 q를 $i^0 - j^0$ 평면에서 정의한다면, p와 에 대해 다음과 같이 정리할 수 있다.

 

 

식 (2.2)와 (2.3)는 아래와 같이 정리 할수도 있다.

 

 

q = $R_0^1$ p

 

 

 

 회전 행렬 $R_0^1$는 벡터 p의 각 $\theta$에 대한 왼손 회전으로 같은 좌표계 상에서 새로운 벡터 q를 구한다. q에서 p로 즉 벡터의 오른손 회전은 $(R_0^1)^T$로 구할수 있다.

 

 

MAV 좌표계

 MAV 동역학을 이해하고 구하려면 여러 좌표계를 이해하여야 하며 여기서 관성 좌표계 inertial frame, 기체 좌표계 vehicle frame, 기체 1 좌표계 vehicle 1 frame, 기체 2 좌표계 vehicle 2 frame, 동체 좌표계 body frame, 안정성 좌표계 stability frame, 바람 좌표계 wind frame에 대해 설명하고자 합니다. 관성 좌표계와 기체 좌표계는 평행이동과 연관되며 나머지 좌표계들은 회전과 관련됩니다. 기체의 상대적인 방향이 각이므로 기체, 기체1, 기체2, 동체 좌표계는 오일러 각으로 유명한 롤, 피치, 요 각을 나타냅니다. 동체/안정성/바람 좌표계 사이 상태적인 회전 각은 받음 각 angle of attack과 사이드 슬립 각 sideslip angle이라 합니다.

 

관성 좌표계 $F^i$

 관성 좌표계는 지정된 위치를 원점으로 하는 지구 고정 좌표계로 그림 2.3에서 단위 벡터 $i^i$는 북쪽을, $j^i$는 동쪽을, $k^i$는 지구 중심 즉 아래를 향합니다. 이 좌표계 시스템은 NED(North East Down) 기준 좌표계라고 부르기도 합니다. 여기서 북쪽을 관성 x 방향, 동쪽을 관성 y 방향, 아래를 관성 z방향이라고 부릅니다.

 

그림 2.3 관성 좌표계

 

 

기체 좌표계 $F^v$

 기체 좌표계의 원점인 MAV 질량의 중심이 됩니다. 하지만 $F^v$의 축은 관성 좌표계 $F^i$와 나란합니다. 즉, 단위 벡터 $i^v$는 북, $j^v$는 동, $k^v$는 지구 중심을 향하며 그림 2.4와 같습니다.

 

 

그림 2.4 기체 좌표계

 

 

 

기체 1 좌표계 $F^{v1}$

 기체 1 좌표계의 원점은 기체 좌표계와 동일하게 비행체 질량의 중심이 됩니다. 하지만 $F^{v1}$은 $k^v$ 축으로 해딩 각(요) $\psi$ 만큼 오른손 양의방향으로 회전하여 구합니다. 추가적인 회전은 없이 $i^{v1}$는 비행체의 코를 가리키며, $j^{v1}$는 기체의 오른쪽 날개, $k^{v1}$는 지구 중심을 향하며 기체 좌표계 1은 그림 2.5와 같습니다.

 

기체 좌표계  $F^v$에서 기체 1 좌표계  $F^{v1}$로의 변환은 다음과 같이 구합니다.

 

 $p^{v1}$ = $R_{v}^{v1}$($\psi$) $p^{v}$

 

그림 2.5 기체 1 좌표계

 

 

기체 2 좌표계 $F^{v2)$

 기체 2 조표계의 원점은 역시 기체 질량 중심이며 기체 1 좌표계를 $j^{v1)$ 축에 대해 피치각 $\theta$만큼 오른손 회전하여 구합니다. 단위 벡터 $i^{v2)$는 기체의 코를 가리키며, $j^{v2)$는 오른쪽 날개, $k^{v2)$는 배를 향하게되어 그림 2.6과 같습니다.

 

기체 1 좌표계 $F^{v1)$에서 기체 2좌표계 $F^{v2)$로의 변환은 다음과 같습니다.

$p^{v2)$ = $R_{v1}^{v2}$ ($\theta$) $p^{v1}$

 

그림 2.6 기체 2 좌표계

 

 

 

 

동체 좌표계 $F^{b}$

 동체 좌표계는 기체 2 좌표계에서 $i^{v2}$ 축으로 롤 각 $\phi$만큼 오른손 회전을 하여 구합니다.그러므로 원점은 질량의 중심이고, $i^{b}$는 기체의 코, $j^{b}$는 오른쪽 날개, $k^{b}$는 배를 가리키게되며 그림 2.7과 같습니다.

 기체 2좌표계 $F^{v2}$에서 $F^{b}$로 변환은 다음과 같습니다.

 

$p^{b}$ = $R_{v2}^b$($\phi$)$p^{v2}$

  

그림 2.7 동체 좌표계

 

기체 좌표계 동체 좌표계로 변환은 다음과 같이 정리할 수 있다.

 

$R_v^b$($\phi , \theta , \psi$) =  $R_{v2}^b$($\phi$) $R_{v1}^{v2}$ ($\theta$) $R_{v}^{v1}$( $\psi$ )                                   (2.4)

* $c_\phi $ = cos $\phi$,  $s_\phi$=sin$\phi$

 

 

 오일러 각은 물리적으로 이해하기 쉽고 많이 사용되고 있지만, 짐벌락 현상처럼 불안정하게 만드는 수학적 특이성 mathematical singularity을 가지고 있습니다. 그래서 쿼터니언은 오일러 각의 문제를 개선한 방법으로 계산도 훨씬 간단합니다.

 

안정성 좌표계 $F^s$

 항공역학적 힘은 기체가 주위의 대기를 지나가면서 일어납니다. 이때 주변 대기에 대한 기체의 상대적인 속도를 대기 속도 벡터라 하며 $ V_a $로 표기합니다. 대기 속도 백터의 크기를 대기 속도 $ V_a $ 라 하고, 양력을 만들기 위해 기체의 날개는 대기 속도 벡터에 대해 양의 각도로 날아야만 합니다. 이때 각을 받음각 angle of attack이라 하며 $\alpha$로 표기합니다. 그림 2.8처럼 받음각은 $j^b$축에 대해 왼손 회전으로 구합니다. 왼손 회전으로 양의 받음각을 구하고, 안정성 좌표계 $i^s$ 축에서 동체 좌표계 $i^b$축으로 오른손 회전시 양의 값을 가지게 됩니다. 

 $\alpha$는 $F^b$에서 $F^s$로 왼손 회전으로 구하며 아래와 같이 정리할 수 있습니다.

 

$p^s$ = $R_b^s$ ($\alpha$) $p^b$ 

 

 

그림 2.8 안정성 좌표계

 

 

 

 

 

 

 

 

300x250
728x90

시스템 아키텍처

 이 책은 무인 비행체 제어와, 가이던스, 자율 비행을 학습할수 있도록 목표를 하고있고, 자율 및 준 자율비행에 필요한 소프트웨어 알고리즘에 초점을 맞추고 있습니다. 이 분야를 다루기 위해서 좌표계 변환, 항공역학, 오토파일럿 설계, 상태 공간, 경로 계획, 컴퓨터 비전 등 다양한 분야와 친숙해야하며, 이러한 주제들을 통틀어서 MAV(miniature air vehicle)에 적용하고자합니다.

 

 이 주제를 개발하려면 그림 1.1의 소프트웨어 아키택처를 떠올려봅시다. 무인 비행체는 6자유도 물리적 비행체로 6개의 제어 입력(엘리베이터, 에일러론, 러더, 스로틀)과 다른 요란들에 대해 응답으로 동작합니다. 고정익 비행체의 수학적 모델링을 이해하기는 복잡하여 2~5장 그리고 9장에서 다루고자 합니다. 우선 2장에서 좌표계와 좌표계간 변환을 다룰 것이고, MAV에 대한 사양들은 관성 좌표계를 기준으로 나타냅니다.

 

 반면에 대부분 센서 측정과 엑추에이터로 작용하는 힘과 토르크들은 동체 좌표계(body frame)을 기준으로 나타냅니다. 3장에서는 강체에 대한 기구학과 동역학적 운동방정식을 구하고, 4장에서는 고정익 비행체에 작용하는 항공역학적인 힘과 모멘트를 설명합니다. 5장에서는 3,4장에서 구한 6자유도, 12상태, 비선형 운동방정식들을 조합하기 시작할 것이나 시뮬레이션에서 정확하게 다루기에는 6자유도 모델은 너무 복잡합니다. 기체 제어기 설계와 분석과정을 저차 선형 모델로 쉽게 구할수 있습니다. 선형 모델은 트림이 낮은 상태를 나타내며 5장에서 전달 함수와 상태 공간 모델로 구할 것입니다.

 

 그림 1.1의 오토파일럿 블록은 롤 roll, 피치 pitch, 대기속도 airspeed, 고도 altitude, 방위각 course heading 등을 유지하는 저수준 제어 알고리즘이며, 6장에서 오토 파일럿 제어 설계를 위해 연속 폐루프 successive loop closure 기술을 살펴볼 것이다. 제어기는 중첩된 형태로 이루어지며 내부 루프는 롤과 피치각, 외부 루프에서 대기속도와 고도, 방위를 유지시킵니다.

 

 고수준 제어를 하려면 가속도계와 자이로, 압력 센서, 지자계, gps 등 센서를 필터링을 하여 구한 정확한 상태 값이 필요한데, 이 센서에 대한 설명과 수학적 모델링은 7장에서 다룬다. 이때 소형 무인 비행체의 모든 상태들을 구하기는 힘들기 때문에 상태 추정이 매우 중요한 역활을 하며, MAV에 이용하는 상태 추정 기술 설명은 8장에서 다루고자 합니다.

 

 오토 파일럿과 상태 추정 기술로 구한 완전한 비행 동역학 모델은 고차원이고 매우 복잡하며 비선형 시스템이 됩니다. 이 완전한 시스템은 고 래밸의 가이드 알고리즘을 이용하기에는 너무 복잡하여 9장에서는 시스템의 폐루프 동작을 나타내는 저 차수 비선형 방정식 구할 것이고, 이 모델로 차후 가이드 알고리즘을 구현하고자 합니다.

 

 MAV에서 중요한 요소중 하나로 바람인데, 대지 기준 수백 피트 상공 above ground level AGL에서 바람 속도 wind speed는 항상 10mph를 넘으므로 대기 속도 airspeed는 20~40 mph 기체에 작용하게 됩니다. MAV는 바람에 따라 효율적으로 제어를 해야하지만 로봇 공학에서 이용하는 기존의 궤적 추종 trajactory tracking 방법들 잘 동작하지 않습니다. 변화하는 바람의 영향으로 대지 속도가 특정 시간에 어떻게 변하는지 알기 어렵기 때문입니다. 대신 경로 추종 path-following 방법은 비행 시 효율 적이며, 10장에서 이 알고리즘과 그림 1.1의 경로 추종 블록의 성능을 봅시다. 여기서 직선 경로와 원형 궤적을 주의 깊게 다룹니다.

 

 그림 1.1에서 경로 매니저 path manager는 일련의 웨이 포인트 설정들을 직선과 원형 궤적으로 변환하는 상태 머신은 경로 계획기가 장애물을 지나는 일련의 직선 경로나 듀빈스 경로를 만들 수 있도록 경로 계획 문제를 단순화 시키는데 사용하게 됩니다.  11장에서 경로 매니저, 12장에서 경로 계획기를 설명할 것이고, 경로 계획에서 두 종류의 문제를 고려해야 되는데, 첫번째 문제는 점대점 알고리즘으로 시작 지점에서 끝 지점까지 제어 중에 장애물들을 회피하기 위한 방법이고, 두번째 문제는 가본적 없는 지역을 다닐수 있도록 목표하는 검색 알고리즘이 있습니다.

그림 1.1 시스템 아키텍처. 경로 계획기 - 직선이나 장애물을 통과하는 듀빈스 경로 생성, 경로 매니저 - 웨이 포인트를 따라 비행하도록 궤적이나 직선 경로를 추종하도록 전환. 경로 추종 - 저수준 오토파일럿 제어 명령 생성.

 

 MAV를 다루는 대다수의 어플리케이션들은 전자/적외선 카메라를 사용하는데, 이 카메라는 시각 정보를 사용자에게 전달하는걸 목표로 하고 있습니다. MAV 성능은 제한되있어 카메라를 항행과 가이드, 제어에 사용해야 됩니다. 13장에서는 카메라를 이용해 영상 기반 위치 추정과 이착륙 관련 사용법들을 다룰 것입니다. 지오로케이션 geolocation은 영상과 센서 데이터로 좌표계상 위치를 추정하는 방법이며, 영상 기반 이착륙은 영상으로 목표지까지 안내하는데 사용합니다. 

 

 13장에서선 그림 1.2의 소프트웨어 아키텍처를 사용할 것인데 이때 경로 계획기 블록이 영상 기반 안내기로 바뀌었습니다. 영상 기반 안내기는 경로 계획기랑 동일한 역할을 하며 이 아키텍처의 주요 특징이 됩니다.

 

그림 1.2 영상기반 비행, 안내, 제어 시스템 아키텍처. 카메라가 추가되었으며 경로 계획기가 영상 기반 안내 블록으로 바뀌었습니다.

 

 

모델 설계하기

 여기서 전반적으로 다루는 설계 철학은 그림 1.3에서 보여줍니다. 무인 비행체는 그림 1.3의 물리적 시스템과 액추에이터(제어 플랩과 프로펠러), 센서(IMU, GPS, 카메라 등)로 동작하며, 설계의 첫번째 단계는 비선형 미분 방정식으로 물리적 시스템을 설계해야 합니다. 여기서 추정과 단순화 과정이 필요하며 이 물리적 시스템의 중요한 특성들을 수학적으로 표현하여야 합니다.

 

 여기서 물리적 시스템 모델은 강체의 기구학과 동역학(3장), 항공역학적 힘과 모멘트(4장), 센서(7장)들을 포함하며, 모델의 결과물은 그림 1.3에서 시뮬레이션 모델이라 불리며 물리적 시스템의 정밀한 컴퓨터 시뮬레이션으로 이용됩니다. 그러나 시뮬레이션 모델은 효율적으로 설계하기 위해 추정하고 단순화 한 것일 뿐이며 물리적 시스템에서 정상적으로 동작한다고 생각해서는 안됩니다.

 

 시뮬레이션 모델은 보통 비선형이며, 고차수 high order이고, 너무 수학적으로 복잡해서 제어기 설계에 좋지 않습니다. 그래서 사용하려면 시뮬레이션 모델을 단순화, 선형화하여 저차 lower order 모델로 만들어야 합니다. 물리적 시스템에서는 설계 과정에 따라 다양한 모델들이 존재할 수 있으며, 저수준 제어기와 고수준 안내기를 같이 사용할 수 도 있습니다.

 

 5장에서는 종방향(피치와 클라임빙) 운동과 횡방향(롤링과 해딩) 운동을 분해하고 각각의 동작에 대해 다른 모델을 만들 것입니다. 5장에서 구한 선형화 모델은 6장에서 사용하여 대기속도와 고도, 방위각 제어에 사용하는 저수준 오토파일럿 루프를 개발하는데 사용할 것이고, 8장에서 센서 값이 오토파일럿 루프에서 어떻게 상태 추정을 하게 되는지 살펴볼것입니다.

 

 시스템의 물리학적 동작과, 저수준 오토파일럿, 상태추정 루틴을 나타내는 수학적 방정식은 너무 복잡해서 고수준 안내기를 설계하는데 유용하지 않습니다. 그래서 9장에서 대기속도와, 고도, 방위각을 입력으로 하고, 관성 위치와 방향을 출력으로 하는 시스템의 폐루프 동작을 나타내는 비선형 모델을 구하고, 9장에서 개발한 모델로 10~13장 과정을 거치며 안내 방법들을 개발하고자 합니다.

 

 그림 1.3을 보면 디자인 모델은 안내기와 제어 시스템 설계하는데 사용되며, 고 정밀 시뮬레이션 모델과 비교해서 테스트를 하게 됩니다. 이후 물리적인 시스템을 구현하고 테스트와 디버깅 과정을 거치며 시뮬레이션 모델이 물리적 시스템에 맞게 바뀔수도 있습니다.

그림 1.3 설계 과정.  물리 법칙을 이용해서 물리 시스템을 설계하며, 이걸로 시뮬레이션 모델을 만듬. 시뮬레이션 모델은 단순화 하여 설계 모델을 만들고, 설계 모델로 제어기 모델을 만들어 시뮬레이션 상에서 시험과 디버깅 과정을 거침 이후 실제 물리 시스템으루 구현.

 

 

 

300x250
728x90

커널 이미지 구현

- 개발 도구 설치 : 툴체인 설치, 빌드 자동화 도구 이용

- 커널 포팅 준비 : 커널 소스 설치, 커널 패치

- 리눅스 커널 수정 및 구현 : 빌드 환경파일, cpu 아키텍처 소스, 커널 초기화 코드, 디바이스 드라이버, 커널 컴파일 코드 수정 혹은 구현

 

 

 

개발 환경

- 임베디드 시스템은 개발 환경과 타겟 시스템이 다름

- 호스트 시스템 : 개발 환경과 운용환경이 다를 경우 개발을 위한 환경. 여기서 루트파일 시스템, 어플리케이션 개발 -> 호스트 컴퓨터

- 크로스 컴파일 환경 : 임베디드 시스템을 위한 소프트웨어 개발하기 위해 호스트 시스템 구축하는 개발 환경

- 빌드 루트 : 툴체인과 RFS(root file system)를 보다 쉽게 구축할수 있도록 만든 것

 

 

 

커널 개발 방식

1. 커널을 타겟 보드에서 다운로드하여 직접 수정 사용

2. pc에서 크로스 컴파일러로 커널 이미지 생성 후 타겟에 이식

 

 

크로스 컴파일러 선택

- 타겟 프로세서에 맞는 것을 찾아 사용해야힘

- arm 프로세서를 대상으로 크로스 컴파일러 설치

 

 

 

라즈베리파이 3의 툴체인

- git clone https://github.com/raspberrypi/tools ~/tools

 

 

 

툴체인을 다운받으면 바로 사용할수있는가

- 경로 설정을 하면 어느 디렉토리에서나 사용 가능

1. $path 라는 환경변수에 크로스컴파일러의 경로 추가.

2. bashrc에 적용

 

 

 

커널 소스 컴파일 과정

- ncursesdv, build-essential 패키지 설치 apt 명령어

- 커널 소스 다운

 - kernel.org에서 표준 커널 소스 다운 후 타겟에 맞게 수정,

 * 패치 파일- 하드웨어 제조사에 해당 보드에 맞게 수정 없으면, 개발자가 직접 수정해야함

 

 

라즈베리파이의 리눅스 커널 소스

- git clone --depth=1 https://github.com/raspberrypi/linux.git 

 

 

라즈베리파이3을 위한 기본 설정

- cd linux

- KERNEL=kernel7(64비트 리눅스 커널 생성)

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

- bcm2709_defconfig

- make ARCH=arm menuconfig 추가 수정 시

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

- arch/arm/boot에 zImage 커널 파일 생성완료

 

 

 

zImage 분석

- readelf -S zImage

- 14개 색션의 헤더들이 있음

 - 시작 주소 0x3d922c

- bss : 커널에서 전역변수를 사용할때 사용하는 메모리

- stack : 지역변수나 함수들을 호출할때 사용하는 메모리

 

 

 

 

 

 

라즈베리파이 커널 부팅 로고 바꾸기

 

1. 라즈베리파이 커널 다운

- 툴체인 다운

 

- bashrc에 경로 추가

- soruce ~/.bashrc로 적용

 - ncurse-dev, build-essential

 

 

2. 라즈비안 커널 소스 다운

 

 

3. 라즈비안 부팅시 로고 변경

- find 명령어로 logo 파일 검색

- 로고 디렉토리로 사진 옮기기

 

-jpg파일을 ppm 파일로 변경

- ppm 이미지 색상을 변경

- 이미지 색상변경

 

4. 커널 이미지 생성

- KERNEL=kernel7

- 나머지는 디폴트로 커널 설정

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2789_defconfig

zImage 생성

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

 

zImage 파일을 kernel7.img로 변경

- mv zImage kernel7.img

-> 이후 sd 카드에 옮기기

 

 

부팅 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

커널 소스 분석 환경 준비

커널

- 하드웨어 자원을 효율적으로 사용하게 해주는 소프트웨어

- 리눅스는 커널이 오픈소스로 무료로 사용 변경 수정 가능

- 리눅스 커널은 리눅스 재단에서 버전 관리

 

리눅스 커널 다운로드하는곳

- kernel.org

- tar.xz 압축 파일로 다운로드됨

 

커널 소스

- 압축 파일 안에 대부분 c언어로 작성. 일부는 어셈블리어

 

리눅스 커널 분석에 필요한 환경

- 소스에서 수정이 필요한곳을 찾아 수정해야함

- but 소스코드가 방대하여 함수, 변수, 기능 찾기가 힘듬

- 소스 코드 중 원하는 부분을 찾는 도구를 사용해야함.

- 이클립스의 ctags, cscope, taglist 등 도구 설치 or vim 에디터에 이 도구들 결합하여 사용

 

각 도구별 활용 방법

- 리눅스 터미널에서 vim에 cscope와 plugin 연동해 사용

- vim, cscope, ctags에 taglist.vim, the nerd tree, srcexpl.vim 추가해서 사용

- vim은 기본적인 에디터

- ctags : 프로그램 소스로부터 태그를 생성. 태그는 간단하게 인덱스라 생각하면됨. 함수나 변수, 클래스 맴버, 매크로등 요소들을 인덱스로 생성하여 디비로 만들고. db정보를 이용해 vim 에디터에서 쉽게 변수, 함수 검색

 

ctag 설치 과정

- sudo apt-get install ctags

 

스크립트 존재 확인

- ls -al ./scripts/tags.sh

- make tags ARCH=arm -> 아키텍처를 arm에 국한해서 태그 생성

 

tags 파일 생성 확인

- ls -alh tags

 

 

cscope

- 소스코드 심볼에 대한 인덱스 구성. 이 인덱스를 통해 심볼이 위치한 파일을 찾을 수 있음

- cscope는 ctags가 가진 제약사완 보완해서 같이 사용

 

cscope 설치

- sudo apt-get install cscope

 

arm용 cscope db 생성

- make cscope arch=arm

 

db 파일 생성 확인

- ls -alh cscope.*

 

vim-plug

- 커널 소스분석을 위한 심볼 데이터페이스 생성을 끝낸후 vim에서 쓰면되는데 직관적인 환경 구성을 도움

- vim과 플러그인들을 조합하고 ctag, cscope 연동

- source explorer, nerd tree, tag list 플러그인 등 설치 필요 -> www.vim.org

 

 

설치 방법

- mkdir .vim

- cp download/screxpl.vim .vim

- cp download/nerd_tree.zip .vim

- cp download/taglist_46.zip .vim

- cd .vim

- mkdir plugin

-mv scexpl.vim ./plugin

- unzip nerd_tree.zip

- unzip taglist_46.zip

- ls ./plugin (nerd_tree.vim , scexpl.vim, taglist_46.vim 확인

 

 

 

 

커널 소스 분석하기

커널 소스 다운로드 방법

- 라즈베리파이에 맞는 리눅스 커널 소스

git clone --depth=1 https://github.com/raspberrypi/linux

 

컴파일 방법

- make 명령어 사용

- makefile이라는 파일을 찾아 정의해놓은 소스를 빌드하기 위한 순서대로 수행

- 리눅스 소스 트리 루트에 컴파일러 설정 항목이 있음

- 크로스 컴파일러의 설치 위치가 다를수 있어 변경이 필요할수도 있음

- make 하기전, 아키텍처와 컴파일러 설정. 

export ARCH=arm

export CROSS_COMPILE=aarch64-linux-gnu-

 

 

커널의 부팅과정과 소스코드

- 부트로더에서 커널이 올라올 경우 zImage가 올라와서 압축이 해제됨

- zImage 앞부분 압축 해제 코드/ 뒷부분 :  압축된 커널 내용

 

 

zImage 압축 해제 순서

- 초기화 작업 후 zImage에 내장된 압축 해제 프로그램에서 진행

- piggy.gzip 같은 리눅스 커널을 메모리 상에 압축을 해제해서 올림 

 

압축 해재 후 실행 순서

 

커널의 계층적 구조

 

 

운영체제 커널 분석 - 리눅스 커널 소스 분석

1. 라즈베리파이 커널 소스 다운

- 이후 src 폴더에 옮김

 

2. 운영체제 소스 분석을 위한 도구 다운로드 및 설치

ctag

- 태그 데이터베이스를 만들어 코드에서 찾고자하는 함수가 있을때 함수가 정의된 곳으로 이동시켜줌

 

cscope

- ctags에서 지원하지 않는 함수들을 탐색이 가능

- 일바족으로 ctags, cscope 같이 사용

 

ctag 설치

- sudo apt-get install ctags 

 

 

테크 디비 생성

- 범위 지정 후 메이크

- make tags ARCH=arm

 

cscope 설치

- sudo apt-get install cscopes

 

cscope db 생성

- make scope ARCH=arm

 

vim 플러그인 이용하기

- www.vim.org 서 다운 가능

- source expolorer, nerd tree, taglist 다운

 

 

플러그인 설치

- .vim 디렉토리 생성하여 플러그인 복사

- unzip으로 해제해야함

 

vim과 플러그인 연동 - vim 설정 수정

- vi .vimrc

 

 

라즈베리파이 운영체제 소스 분석

- 커널 소스가 있는 폴더에서 vim 실행

 

- f7, f8, f9 클릭하여 플러그인 켜기

 

- ctrl + h,j,k,l 화면에서 커서 이동

 

커널의 시직 프로그램

init/main.c

 

start_kernel 찾기

- ex mode 진입 : esc + :

- start_kernel 검색

- 왼쪽이 소스 익스플로러, 중간이 소스 에디터, 우측이 함수 목록

 

 

start_kernel로 이동

- start_kernel 엔터

하단 창에 커서가 지정된 함수가 정의 된 곳이 나옴

setup_arch 함수로 이동

- start_kernel 함수 내 setup_arch 함수 위 커서 놓기

- 아래 창으로 이동 후 file path 에서 엔터

이전으로 이동하기

- space

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

부트로더 구현

부트로더

- 특정 cpu에서 운영체제나 프로그램 돌릴수있게 cpu 동작에 필요한 기초적인 부분이나 rom, ram, uart 등 기본적인 디바이스들이 동작할수있도록 만들어지는 프로그램

 

u-boot universal bootloader

- arm 기반 소프트웨어 개발시 가장 많이 사용하는 부트로더

 

 

u-boot 로 부트로더 구현시 필요한것

- 하드웨어 초기화로 cpu 클록, 인터럽트, uart, serial, gpio 등 초기화 코드가 있음

-> lolevel_init, board_init_f, board_init_r 등 세가지 루틴으로 할 수 있음

 

 

라즈베리파이 부트로더 구현 과정

- make 파일로 만들어서 제공

- 필요한 환경 설정 -> defconfig

1. 부트로더 소스 다운

 - 호스트에 깃 설치

 - 부트로더 클론

 - 클론한 폴더 확인

2. 부트로더 이미지 생성

 - 크로스 컴파일러 설치

 - 크로스 컴파일러 버전 확인

 - 크로스 컴파일러 환경변수 지정 - export CROSS_COMPILE=크로스 컴파일러 이름

 - 라즈베리파이 환경 설정 - configs 폴더의 rpi_3_defconfig 파일에 환경 설정 존재. 여기서 필요한 장치, 필요없는 파일 지정

 - 부트로더 컴파일

 - u-boot.bin 파일 생성 확인

 - 이미지로 변환

3. 생성된 이미지를 sd카드에 복사

4. sd카드를 라즈베리 파이에 삽입

 - 전원 공급 후 3초이내 스페이스바 클릭 -> uboot 프롬프트로 진입

 

 

펌웨어 구현 과정 실습

 

u-boot 소스코드 분석하여 라즈베리파이 부트로더 구현  - gpio에 연결된 led 기능 제어 실습

1. uboot 소스코드 다운

git clone git://git.denx.de/u-boot.git

2. cross compiler 설치 및 등록

- aarch64-linux-gnu

sudo apt-get install gcc-aarch64-linux-gnu

export 명령어로 교차 컴파일러 등록

- export CROSS_COMPILE=aarch64-linux-gnu-

 

3. uboot 소스코드 분석

find 명령어로 파이 소스 찾기 : find ./ -name *bcm*

find ./ -name *rpi*

rpi_3_defconfig 파일

- 부트로더명을 u-boot에서 ncs-em으로 변경

 

 

 

rpi.h 확인

 

 

rpi.c 확인

- 메모리맵을 확인해보면 물리적 주소가 0x3f00 0000

 

 

4. uboot 소스에 명령어 추가 - gpio 물리적 주소를 통한 led 제어

gpio를 통해 led 제어하는 hello.c 파일 작성

 

gpio 사용하는 방법

1. bootloader 함수 사용하는 방법

2. gpio의 물리적 주소를 사용하는 방법 -> 사용

* 주변장치 물리적 시작 주소 : 0x3f00 0000(데이터시트)

* gpio offset : 20 0000

=> gpio 물리적 시작 주소 : 0x3f20 0000(주변장치 물리적 시작 주소 + gpio offset)

 

 

물리적 주소로 gpio 제어 프로그램 작성 hello.c

- gpset0 : 전압을 가함

- gpclr0 : 전압을 가하지 않음

- 18번 핀 사용하므로 18번 시프트

 

kconfig 수정

- 메뉴컨피그 사용시 항목이 출력되도록 설정

 

 

makefile 수정

- menuconfig 설정시 같이 빌드되도록 hello.o 추가

 

u-boot 환경 설정

- defconfig파일 사용 -> 타겟명이 rpi3이므로 rpi_3_defconfig

make rpi_3_defconfig

menuconfig 설정

- hello 명령어 추가

 

5. uboot 소스에서 부트로더 이미지 생성

크로스 컴파일러 확인

컴파일

u-boot.bin 생성 완료

 

uboot.bin을 sd카드로 옮겨 raspberry pi 부팅

- 이름을  kernel8.img로 변경

 

부팅 후 3초 이내 키보드 입력하여 uboot 명령어 모드 진입

- config_sys_prompt 를 u-boot에서 ncs_em으로 바꿔 다음과 같이 출력

 

led 명령어 수행

 

 

 

 

 

300x250
728x90

펌웨어 설계 문서 분석

펌웨어 구현 개발 도구

- 소스 코드 및 컴파일을 호스트 PC에서 작성 하여 임베디드 보드에 다운로드 후 실행

- 호스트 시스템 : 프로그램 개발 PC환경

- 타겟 시스템 : 프로그램이 실행되는 임베디드 시스템

-> 호스트 시스템과 타겟 시스템 사이 통신, 디버그 정보를 얻기위해 추가적인 개발환경 필요 : 에디터, 컴파일러, 디버거, 링커 등

 

호스트와 타겟 시스템의 운영체제 제한

- 호스트 시스템 운영체제는 대중적인 OS 지원

- 타겟 시스템 : 펌웨어 상태서 하드웨어 스펙에 의존. 

 

운영체제 외 개발에 필요한 도구

- 컴파일 : 소스프로그램을 실행 파일로 변환하는 과정

 

컴파일 과정

1. 전처리 : 소스코드 전처리

2. 컴파일러 : 전처리 코드를 어셈블리 코드로 변환

3. 어셈블러 : 어셈블리 코드를 재배치 가능한 기계어 코드로 변환

4. 링커 : 외부 라이브러리와 기계어 코드를 합쳐 실행가능 기계어 코드 작성

5. 로더 : 메모리에 올려 실행

6. 메모리

- 툴체인 : 소스 파일을 실행파일로 만드는데 사용되는 도구들이 연결된것

 -> 타겟에 따라 다른 툴체인 설치

 

GNU

- gcc, binutill, gnu c library 등이 있으며 버전 의존성 존재

 

라즈베리파이 툴체인 설치 방법

- git에서 다운

 

 

 

 

하드웨어 데이터 시트 분석

펌웨어 구현시 데이터 시트

- 펌웨어는 하드웨어에 의존하는 프로그램

- 마이크로 프로세서 제조사나 평가 보드 제조사의 데이터 시트 기반으로  프로그램 작성

 

라즈베리파이3 예시

- bcm2837(arm cortex-a53 프로세서)의 gpio 

 

bcm2837arm 주변장치에 대한 데이터 시트 분석

- 회로도, 하드웨어 구성, 가이드 등 모든 내용 포함

 

 

 

 

arm 물리적 주소

- 물리적 주소 범위 : 0x3F00 0000 ~ 0x3FFFF FFFF

- 주변장치 버스 어드레스 범위 : 0x7E00 0000 ~

 

 

 

GPIO 레지스터 뷰

- 주변장치 베이스 가상 주소 0x7E00 0000

- GPIO 시작 가상 주소 0x7E20 0000

- GPIO Base offset 0x20 0000(0x7E20 0000 - 0x7E00 0000)

- GPIO 시작 실제 물리 주소 : 0x3F20 0000(0x3F00 0000 + offset)

 

 

개발환경 구축 실습

1. 부트로드 소스 컴파일을 위해 크로스컴파일러 설치

2. 부트로더에 새로운 명령어 추가

 

 

크로스 컴파일러

- 컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행가능한 코드를 크로스 컴파일해주는 컴파일러

- 노트북 <- 크로스 컴파일 -> 라즈베리파이

- 라즈베리파이에서 실행가능하도록 크로스 컴파일

* 크로스 컴파일러 :  aarch64-linux-gnu 사용

 

1. 크로스 컴파일러 설치

2. 유부트 소스에서 라즈베리파이3 부트로더 이미지 생성

- 크로스컴파일러를 지정하는 환경변수 설정

필수 라이브러리 설치

- bison, flex



파이 보드에 맞게 설정 하기

-config 디렉토리 : rpi_3_defconfig폴더에서 지정

- make rpi_3_defconfig

 

부트로더 컴파일

-make

 

 

부트로더 확인

- ls로 컴파일 결과 확인 uboot.bin

 

 

3. 라즈비안 이미지 파일 받고 부트로더 이식하기

- win32diskimager

 

 

라즈비안 이미지 파일 분석

- 커널 이미지 : 부트로더는 커멀 이미지 숫자가 더큰걸 불러옴. kernel7.img

 

 

부트로더 넣기

- uboot.bin -> kernel8.img 로 이름 변경 후

 

 

부트로더 진입

- 부팅 시. 3초 이내 키보드 입력시 uboot 명령어 모드로 진입

- ? 로 명령어 확인

 

 

 

GPIO 명령어로 LED 제어

- 내장 LED는 GPIO29번과 연결

- help gpio로 확인

 

 

 

 

 

 

300x250
728x90

펌웨어 구조 설계하기

부트로더 기능 분류와 공통요소 추출 방법

- 유부트 기본으로 이해하면 쉽게 이해 가능

- 유 부트 디렉토리 구조는 리눅스 디렉토리 구조와유사

 

부트로더 디렉토리 구조

- 타겟에 맞게 수정해야함

- 최상위 유부트 : makefile, board.cfg 등 주요 파일로 모든 유부트 빌드 동작 실행

- arch : 아키텍처별로 서로다른 디렉토리를 구성, 각 프로세서 아키텍처에 따른 소스 구성하는 디렉토리

- board : 각 제조사별 보드 관련 소스를 구현하는 디렉토리

- common : 유부트에서 공통으로 사용하는 소스 구현한 디렉토리, 유부트 명령어, 환경변수등 소스 구현

- driver : gpio, i2c, pci, serial, sound, usb와 같이 외부장치의 드라이버 소스 제공

- fs : fat, yaffs2와 같이 u

 

 

개발 보드에 대한 환결설정 내용은?

라즈베리 파이의 경우

- 기본 환경 설정을 defconfig 파일로 제공 -> 원하는 설정 변경 가능

 

 

 

단위 sw 모듈 설계하기

오픈소스 부터로더에 기능 수정이나 추가 방법

- 원하는 기능에따라 수정 부분, 추가 부분이 상황에 따라 다름

 

 

특정 하드웨어 개발하는 경우

- 수정을 위한 하드웨어 동작 관련 디렉토리 위주로 보면

- 라즈베리파이는 브로드컴사의 bcm.

u-boot root directory

 

 

아키텍처 디렉토리와 소스

- 이에 대해 알아야함

- 아크 디렉토리의 암에 대해 살펴보자

arch directory

 

타겟보드 디렉토리

- 타겟에 따라 다르지만 공통적으로 가지는 걸보자

- 보드 디렉토리 > 제조사 디렉토리 > 보드명 디렉토리

target board directory

부트로더 명령어는 어디에?

- uboot 디렉토리 > cmd 디렉토리 > 부트로더 명령어

- 새 명령어 추가시 cmd 디렉토리에 추가

cmd 디렉토리

 

부트로더에서 하드웨어 제어 방법

1. 디바이스들의 물리적 주소로 직접 접근하여 제어

 - 물리적 주소를 알아야함 -> SoC에 대한 데이터 시트 참고

2. 부트로더에서 제공하는 함수들을 이용하여 제어

 - 어떤 함수가 있는지 알아야함

 

cmd 디렉토리서 hello.c 작성

- do_hello 함수 

- U_BOOT_CMD 정의하여 hello 가 입력시 do_hello 함수 호출하도록 정의

kconfig 파일 수정

- 메뉴 컨피그에서 사용여부 고를수 있도록 설정

 

 

makefile 수정

- 메뉴컨피그에서 사용 설정시 빌드 과정에서 포함하도록 hello.o 추가

 

부트로더에서 헬로 명령어 사용

 

 

1. 유부트 소스 코드를 파이에 맞게 설정

2. 부트로더에 새 명령어 추가

 

 

유부트 소스 코드 파이에 맞게 설정

1. 유부트 소스 받기

git clone git://git.denx.de/u-boot.git

 

2. uboot 소스에서 파이 관련 소스 분석

- 각 디렉토리는 고유한 목적 가짐. 각 디렉토리들을 타겟에 맞게 수정해야함

- makefile : 소프트웨어 빌드시. 컴파일 과정과 소스파일 관계 정의

- 타겟에 맞는 메이크파일을 찾아서 실행

- defconfig (default configuration) 찾기 : find ./ -name defconfig

 

- pi3의 defconfig

3. 유부트 소스에서 파이3 부트로더 관련 환경 설정

 

 

새 명령어 만들기

- cmd 디렉토리에 새 추가 할 명령어 작성

- hello 입력시 hello ncs 출력 함수

 

 

kconfig 파일 수정

-kconfig : 부트로더 컴파일시 설정할 항목들을 서술한 파일

 

makefile 수정

- menuconfig에서 빌드 가능하도록 설정하기

 

menuconfig로 명령어 추가

- make menuconfig 명령어로 kconfig에서 추가한 명령어 설정

- 커멘드 라인 인터페이스 > 헬로 펌웨어 커맨드 설정 후 저장

=> 부트로더에서 핼로 명령어 사용가능해짐

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

운영체제 기초 과정 분석 필요 지식

- 펌웨어와 부트로더 이해 필요

 

펌웨어

- 롬에 저장된 소프트웨어

 

임베디드 시스템 구성

1. 큰 임베디드 시스템

- 어플리케이션 소프트웨어

- 부트로더, 운영체제

- 하드웨어

-> 복잡한 기능, 규모가 큰 임베디드 시스템

2. 작은 임베디드 시스템

- 어플리케이션 소프트웨어

- 하드웨어

-> 단순한 기능, 규모가 작은 임베디드 시스템 구성

 

라즈베리파이3 구성

- 어플리케이션 소프트웨어

- 펌웨어(부트로더), 운영체제(리눅스)

- 하드웨어(라즈베리파이)

-> 일반 피씨와 유사한 다양한 어플리케이션 사용 가능

 

아두이노

- 펌웨어

- 하드웨어(아두이노)

-> atmega328 8비트 마이크로 컨트롤러 사용 -> 규모가 작은 임베디드 시스템

 

펌웨어 개발자란?

- 운영체제 없이 마이크로컨트롤러 제어 소프트웨어 개발자

 

부트로더의 역활과 종류

- 운영체제가 시스템에 로드되어 잘 동작하기 위한 사전 작업 준비

1. 하드웨어 초기화

2. 운영체제 동작 환경 구성

3. 운영체제를 메모리로 로드

 

부트로더 특징

- 시스템 하드웨어 의존성이 강함

- 프로세서 구조, 특징, 사용법 이해 필요

- 어셈블리어로 작성. 프로세서에 따른 명령어 사용법 이해 필요

- 크기가 작야아함

- 오픈소스 소프트웨어가 많아 활용하기 용이함

 

 

오픈소스 부트로더 종류

- 모든 하드웨어를 지원하는 부트로더는 없으나 많이 지원하는 오픈소스 부트로더들이 있음

- grub 그럽 : PC 및 서버에서 사용

- u-boot : arm 기반에서 주로 사용

 

운영체제 부트로더 흐름

1. 전원 인가

2. 하드웨어 초기화

3. 커널 부팅

4. 커널 로딩

 

 

exynos-8890 부팅 과정

- exynos-8890 : 최신 프로세서, 작은용량의 롬과 메모리 가짐. 128kb irom, 320 iram 포함

- rom에는 부트 로더가 있어 ram으로 로드함

1. irom에 있는 부트 코드가 실행. om 핀을 확인 하여 어떤 디바이스로 부팅할지 결정

2. bl1코드를 읽어 internal sram에 복사하여 실행 - 하드웨어 초기화 수행

3. b1의 나머지를 dram으로 복사하여 실행

4. 적재된 커널은 부팅 시작

 

 

 

 

라즈베리 파이 부팅 과정

- 라즈비안 2개의 파티션 가짐 :

 1. 부트 파티션

 - 60mb fat32 포멧 필요

 - gpu 초기화에 필요한 코드와 데이터 포함

 - os 커널을 메모리로 가져와 실행하는 역활

 2. 루트 파티션

 - 나머지 os와 모든 파일

 - ext4 리눅스 파일 시스템으로 구성

 

라즈비안 이미지 파일에 무엇이 있는가?

- dtb device tree block :  하드웨어 컴포넌트 데이터베이스 파일. 

- boot code  : 부트로더 파일 

 - cmdline, config : 환경 설정 텍스트 파일

 - kernel.imz, kearnel7.img : 커널

 

 

 

 

 

펌웨어 요구사항 도출하기

임베디드 시스템부팅시 필요한 주변장치

- uart : 병렬 데이터를 직렬 형태로 보내는 장치

- 이더넷 : 네트워크 간 컴퓨터들이 고유의 맥주소를 가지고 주고받을수 있음

- usb : 직렬,병렬 포트등 기존의 연결방식을 대체하기 위해 만들어짐

- gpio : 마이크로프로세서가 주변 장치와 통신을 위해 범용으로 사용하는 비출력 포트(PORTx, DDRx, PINx)

- HDMI : 영상과 음향을 통합한 단자 구격

 

부트로더가 지원해야하는 명령과 동작

- 하드웨어 초기화

- 메모리 복사

- 명령어 복사

 

부트로더 기능과 동작

- 하드웨어 초기화 : 메모리 설정, cpu 클럭 설정, gpio 설정, 시리얼 설정, 네트워크 설정 

- 메모리 복사 : 커널 이미지 램디스크 이미지, 부트로더 자신을 플래시 롬에서 sdram으로 복사

- 커널 부팅 : 커널 이미지를 메모리로 복사 후 압축을 풀고 실행 -> 부트로더는 끝나고, 커널이 제어권 가짐

- 명령어 지원 : 사용자가 부트로더 기능 사용 가능

- 디버깅 모드 : 부트로더 동작 상태를 보면서 에러 부분을 찾을 수 있음

 

 

시스템 부팅 정차에 따른 하드웨어 초기화 과정

1. dram에서 u-boot 실행

2. 보드 초기화 board_init

3. malloc 초기화

4. 플래시 메모리 장치 초기화

5. nand및 oneram 초기화

6. mmc 초기화

7. 환경변수 초기화

8. ip주소 초기화

9. 표준입출력장치 초기화

10. 기타아키텍처 및 보드 관련 초기화

11. 인터럽트 초기화 및 enable

12. 네트워크 디바이스 초기화

13. 메인 루프 실행 common/main.c

 

 

 

u-boot로 부트로더 구조 분석

- u-boot : 암 계열의 부트로더

 

부트로더 3단계

- bl0, bl1 :  칩 벤더에서 제작 및 릴리스하는 코드 영역, 수정 불가

- bl 2 : 일반적으로 사용하는 부트로더

 

u-boot 소스 코드 다운

- 윈도우나 리눅스에서 가능

- 리눅스에서 깃업으로 소스 받음

- git clone git:://git.denx.de/u-boot.git

u-boot 구조 분석

- arch : 각각의 아키텍처에 의존적인 라이브러리 가짐

- board: 보드 관련 소스 제공. 라즈베리파이도 여기있음

 

- driver : uart, gpio 등 외부 장치 관련 드라이버 제공

 

 

 

라즈베리파이3 소스 분석

- find로 bcm 검색

- find ./ -name *bcm*.*

 

- rpi 관련 검색

- find ./-name *rpi*

 

 

오픈소스 부트로더인 uboot 디렉토리 구조와 라즈베리파이 관련 소스 분석 

- 타겟 하드웨어에 맞는 부트로더 개발을 위해 하드웨어 이해와 부트로더 소스 이해 중요

- 구글링으로 정보 검색과 분석 필요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts