FMUSER 무선 전송 비디오 및 오디오가 더 쉬워졌습니다!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> 아프리칸스어
sq.fmuser.org -> 알바니아어
ar.fmuser.org -> 아랍어
hy.fmuser.org -> 아르메니아어
az.fmuser.org -> 아제르바이잔 어
eu.fmuser.org -> 바스크
be.fmuser.org -> 벨로루시 어
bg.fmuser.org -> 불가리아어
ca.fmuser.org -> 카탈로니아 어
zh-CN.fmuser.org -> 중국어 (간체)
zh-TW.fmuser.org -> 중국어 (번체)
hr.fmuser.org -> 크로아티아어
cs.fmuser.org -> 체코
da.fmuser.org -> 덴마크어
nl.fmuser.org -> 네덜란드어
et.fmuser.org -> 에스토니아어
tl.fmuser.org -> 필리피노
fi.fmuser.org -> 핀란드어
fr.fmuser.org -> 프랑스어
gl.fmuser.org -> 갈리시아어
ka.fmuser.org -> 조지아 어
de.fmuser.org -> 독일어
el.fmuser.org -> 그리스
ht.fmuser.org -> 아이티 크리올
iw.fmuser.org -> 히브리어
hi.fmuser.org -> 힌디어
hu.fmuser.org 헝가리어
is.fmuser.org -> 아이슬란드 어
id.fmuser.org -> 인도네시아어
ga.fmuser.org -> 아일랜드어
it.fmuser.org -> 이탈리아어
ja.fmuser.org -> 일본어
ko.fmuser.org -> 한국어
lv.fmuser.org -> 라트비아어
lt.fmuser.org 리투아니아어
mk.fmuser.org -> 마케도니아 어
ms.fmuser.org -> 말레이어
mt.fmuser.org -> 몰타어
no.fmuser.org -> 노르웨이어
fa.fmuser.org -> 페르시아어
pl.fmuser.org -> 폴란드어
pt.fmuser.org -> 포르투갈어
ro.fmuser.org -> 루마니아어
ru.fmuser.org -> 러시아어
sr.fmuser.org -> 세르비아어
sk.fmuser.org -> 슬로바키아어
sl.fmuser.org -> 슬로베니아어
es.fmuser.org -> 스페인어
sw.fmuser.org -> 스와힐리
sv.fmuser.org -> 스웨덴어
th.fmuser.org -> 태국
tr.fmuser.org -> 터키어
uk.fmuser.org -> 우크라이나어
ur.fmuser.org -> 우르두어
vi.fmuser.org -> 베트남어
cy.fmuser.org -> 웨일스 어
yi.fmuser.org -> 이디시어
응용 프로그램 개발: C 언어, 데이터 구조, JAVA 등을 잘 익혀야 합니다. 임베디드 어플리케이션 개발과 PC에서의 어플리케이션 개발에서 특별히 주의할 점은 없습니다. 임베디드 시스템을 최적화해야 한다고 말할 수도 있습니다. 예, 최적화해야 하지만 최적화되지 않은 프로그램은 PC에서 프로그램을 개발하는 것과 다르지 않습니다. 또한 최적화할 수 있는 능력이 생기면 더 이상 이 질문에 익숙하지 않습니다. 개발 인터페이스와 같은 특정 예의 경우 PC에서 VC를 사용합니다. 임베디드 Linux에서는 QT와 Android를 사용할 수 있습니다. 이때 QT와 안드로이드 프로그래밍을 익혀야 합니다. 그러나 기반은 여전히 C 또는 JAVA이며 이를 기반으로 인터페이스에 익숙해져야 합니다. VC를 배웠다면 해당 클래스와 컨트롤을 이해하는 데 시간이 걸립니다.
기본 시스템을 배우고 싶다면 이것이 내 전문 분야이지만 조금 말할 수 있습니다.
이 질문에 답하기 전에 먼저 대답하겠습니다. 많은 사람들이 제게 묻습니다. 운전을 배우기 위한 것입니까 아니면 적용하는 법을 배우는 것입니까? 관심에 기반한 것이며 드라이버와 응용 프로그램이 완전히 분리되어 있지 않다고 말할 수 있습니다.
1. 우리가 말하는 드라이버는 하드웨어 작동에 국한되지 않고 운영 체제 원칙과 프로세스 절전 및 깨우기 스케줄링과 같은 개념도 포함합니다. 좋은 응용 프로그램을 작성하고 응용 프로그램에서 발생하는 문제를 더 잘 해결하려면 이 지식을 이해해야 합니다.
2. 애플리케이션, 특히 현재 ANDROID, 순수 JAVA에 대한 낮은 장벽. 개인적으로 애플리케이션 개발 경로는 비즈니스에 능숙하다고 생각합니다. 예를 들어 통신 산업, IPTV 산업 및 휴대폰 산업에서 업계의 요구 사항을 이해합니다. 따라서 리더인 사람들은 대부분 응용 프로그램입니다.
3. 추진력을 얻습니다. 사실 "드라이버가 되는 것"이 아니라 "저수준 시스템이 되는 것"이라고 부르고 싶습니다. 일단 완료되면 이것은 모든 산업을 죽일 것입니다. 나는 몇 년 동안 일하면서 휴대폰, IPTV, 회의용 TV를 만들었지만 이 제품들은 나에게 아무런 차이가 없습니다. 그들의 사업은 나와 아무 관련이 없습니다. 응용 프로그램에 문제가 있고 해결할 수 없는 경우 커널 관점에서 아이디어를 제공하고 도구를 제공합니다. 저는 개인적으로 최하층의 개발 방향에 있어서 기술 전문가라고 생각합니다.
4. 사실 맨 아래 레이어를 하는 것과 응용 프로그램을 하는 것 사이에는 경계가 없습니다. 최하위 계층 경험이 있다면 응용 프로그램을 수행할 때 매우 편안함을 느낄 것입니다. 비즈니스 경험으로 최하층을 알 수 있고 곧 팀을 구성할 수 있을 것입니다.
학습 방법에 대한 질문으로 돌아갑니다. 임베디드 Linux 기본 시스템에는 무엇이 포함되어 있습니까? 걱정하지 마세요. 예를 들어보면 알 수 있습니다.
1. 컴퓨터를 켜면 누가 이러한 인터페이스를 표시합니까? BIOS입니다. 무엇을 합니까? 일부 자체 검사 후 하드 디스크에서 창을 읽고 시작합니다. 마찬가지로 이 BIOS는 임베디드 Linux의 부트로더에 해당합니다. 이 부트로더는 플래시에서 Linux 커널을 읽고 시작해야 합니다.
2. 윈도우를 시작하는 목적은 무엇입니까? 물론 그것은 온라인 채팅 또는 무언가입니다. 이러한 인터넷 및 채팅 도구는 어디에 있습니까? C 드라이브와 D 드라이브에 있습니다. 따라서 윈도우는 먼저 C드라이브와 D드라이브를 구분해야 합니다. Linux에서는 이를 루트 파일 시스템이라고 합니다.
3. Windows는 C 드라이브와 D 드라이브를 인식할 수 있으므로 하드 드라이브를 읽고 쓸 수 있어야 합니다. 관련된 것들을 드라이버라고 합니다. 물론 하드디스크 뿐만 아니라 네트워크 카드, USB 등도 있습니다. Embedded Linux는 Flash에서 응용 프로그램을 읽고 실행할 수 있으며 Flash 드라이버도 있어야 합니다. 물론 플래시만 있는 것은 아닙니다.
먼저 그것에 대해 이야기해 봅시다. 내장형 LINUX에는 부트로더, 커널, 드라이버 및 루트 파일 시스템의 네 가지 주요 부분이 포함되어 있습니다.
하나, 부트로더
약간 더 복잡한 베어보드 프로그램입니다. 하지만 이 베어보드 프로그램을 이해하고 작성하는 것은 쉽지 않습니다. Windows의 유용한 도구는 우리의 프로그래밍 능력을 약화시킵니다.
많은 사람들이 임베디드 플레이하자마자 ADS와 KEIL을 사용합니다. 이 질문에 답할 수 있습니까?
1. 전원이 켜지면 CPU는 어디에서 실행 명령을 가져오나요?
답변: 일반적으로 지침은 Flash에서 제공됩니다.
2. 그러나 Flash는 읽기만 가능하고 직접 쓰기는 불가능합니다. 전역 변수를 사용하는 경우 이러한 전역 변수는 어디에 있습니까?
대답: 전역 변수는 메모리에 있어야 합니다.
3. 그렇다면 누가 전역 변수를 메모리에 저장합니까?
답: ADS와 KEIL을 오랫동안 사용한 친구에게 대답할 수 있습니까? 이를 위해서는 "재배치"가 필요합니다. ADS 또는 KEIL에서 재배치 코드는 이러한 도구를 만드는 회사에서 작성합니다. 당신은 그것을 읽어 본 적이 있습니까?
4. 메모리가 너무 커서 "원래 플래시에 저장된 콘텐츠"를 메모리로 읽어올 주소를 어떻게 알 수 있습니까?
답변: 이 주소는 "링크 스크립트"에 의해 결정되며, ADS에는 스캐터 파일이 있고 KEIL에는 유사한 파일이 있습니다. 하지만, 당신은 그것을 공부 했습니까?
5. 재배치는 플래시에서 메모리로 프로그램을 복사하여 이 프로그램이 플래시를 읽을 수 있도록 하는 것이라고 말씀하셨습니까? 대답: 네, 플래시를 작동할 수 있어야 합니다. 물론 이것뿐만 아니라 시스템을 더 빠르게 실행하기 위해 시계를 설정하는 등의 작업도 있습니다. 먼저 여기에서 묻고 답해봅시다. 베어보드 프로그램인 부트로더는 실제로 세 가지 주요 사항이 있습니다.
1. 하드웨어 작동
2. ARM 시스템 프로세서의 이해
3. 프로그램의 기본 개념: 재배치, 스택, 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트 등.
하드웨어 작동을 위해서는 회로도와 칩 설명서를 참조해야 합니다. 이를 위해서는 어느 정도의 하드웨어 지식이 필요합니다. 하드웨어를 설계할 수 있어야 하는 것은 아니지만 최소한 하드웨어를 이해할 수 있어야 합니다. 아날로그 회로를 이해할 수 있어야 하는 것이 아니라 디지털 회로를 이해할 수 있어야 합니다. 나는 이 능력을 학교에서 배웠다. 두 권의 책(잊어버린 책의 제목)이면 충분하다. 하지만 이 두 권의 책을 다 읽을 인내심이 있는지 의심스럽습니다. 지금 더 빠른 책이 있는지 모르겠습니다. 빨리 만들고 싶으면 이걸 먼저 놔두고 이해가 안되면 그냥 구글에 물어보고 글 올리세요.
또한 칩 설명서를 읽어야 합니다. 중국어를 찾지 말고 영어만 보세요. 처음에는 매우 고통스러웠지만 나중에는 문법과 어휘가 익숙해지면 어떤 칩 설명서도 쉽게 읽을 수 있습니다.
ARM 시스템 프로세서에 대한 이해는 Du Chunlei's를 참조하십시오. 조립 지침, 예외 모드, MMU 등에 대해 설명합니다. 이 3가지 콘텐츠만 이해하면 됩니다.
프로그램의 기본 개념은 물론, 컴파일의 원리를 왕이 따를 것입니다. 불행하게도 이런 종류의 책은 확실히 천서적 수준이다. 당신이 슈퍼 천재가 아니면 보지 말 것을 권합니다. 그냥 지켜봐 그리고 내가 쓴 첫 번째 비디오는 걱정하지 마십시오. 돈을 쓰지 마십시오. 비디오를 보고 하드웨어 관련 실험을 수행하면 이러한 개념이 명확해집니다. 나는 맹목적으로 그것에 대해 자랑할 수 있도록 이러한 개념에 대해 이야기하는 두 번째 책이나 비디오 세트를 찾지 못했습니다. 부트로더는 공부할 때 처음 보고 프로그램을 직접 작성해서 GPIO, clock, SDRAM, UART, NAND 등 다양한 하드웨어에 대한 모든 실험을 했습니다. 그것들을 명확하게 하면 u-boot를 함께 그룹화하여 이해하기 쉽습니다. 요약하면 하드웨어 회로도와 칩 설명서를 이해하려면 직접 정보를 찾아야 합니다. 나머지는 챕터 목록을 따르십시오. 비디오의 첫 번째 단계는 배울 수 있습니다.
둘, 커널
시작하려는 사람들은 먼저 커널 학습을 건너뛰고 드라이버를 직접 작성하는 방법을 배워야 합니다.
마스터가 되려면 커널에 대한 깊은 이해가 있어야 합니다. 내가 이해에 대해 이야기하고 있다는 점에 유의하십시오. 나는 커널을 작성하려는 사치스러운 희망이 없습니다.
내부의 스케줄링 메커니즘, 메모리 관리 메커니즘, 파일 관리 메커니즘 등을 이해합니다.
두 권의 책을 추천합니다.
1. 끝까지 읽어주세요, 얇은 책을 읽어주세요 (떠다니는 사회는 속도를 강조합니다)
2. 읽기를 선택하고, 어떤 섹션을 읽을지 알고 싶습니다.
셋, 드라이브
드라이버는 하드웨어 자체의 작동과 드라이버 프레임워크의 두 부분으로 구성됩니다.
다시 하드웨어입니다. 회로도와 칩 설명서를 이해하는 것이 여전히 필요합니다. 더 많이 연습하세요. 드라이버 프레임워크에 대해 말하자면, 이를 소개하는 책이 몇 권 있습니다. 외국인이 쓴 책 LDD3는 많은 개념을 소개하고 있어 읽을 만하다. 그러나 그 역할은 개념을 도입하는 것으로 제한됩니다. 기본적으로 시작하기 전에 개념을 익히고 시작하고 나면 버립니다.
드라이버에 대한 보다 포괄적인 소개는 Song Baohua의 것입니다. 솔직히 카탈로그만 읽어요. 많은 사람들이 예라고 말했습니다. 여기를 추천합니다.
특정 영역을 깊이 있게 이해하고 싶다면 별 5개짜리 슈퍼 추천입니다. 1,800페이지 이상, 위아래로 두 권이 넘는 책을 읽을 것이라고는 기대하지 마세요. 특정 영역에 대해 확신이 서지 않을 때 살펴보겠습니다. 이 책의 어떤 부분도 2.4~XNUMX페이지에 달할 수 있으며 매우 상세합니다. 그리고 특정 목표를 가지고 커널 소스 코드를 분석하도록 안내합니다. 리눅스 XNUMX를 예로 들었지만 원리는 동일하며 다른 버전의 리눅스에도 적용할 수 있다. 다른 소개는? 물론 Wei Dongshan Linux Video의 두 번째 문제가 있습니다. "Complete Handbook of Embedded Linux Application Development"는 드라이버에 대해 많이 언급하지 않으며 충분히 심층적이지 않습니다.
개발 보드와 관련된 모든 하드웨어용 드라이버를 작성해 보십시오. 문제가 있으면 먼저 "고통스럽게 생각"해야합니다. 생각하는 과정에서 관련 없는 많은 지식을 연결하고 마침내 통하게 됩니다.
넷째, 루트 파일 시스템
다음 두 가지 질문에 대해 생각해 본 적이 있습니까?
1. 리눅스로 만든 제품은 모니터링용으로 사용하는 제품도 있고 휴대폰으로 사용하는 제품도 있고 태블릿으로 사용하는 제품도 있다. 커널이 시작된 후 루트 파일 시스템을 마운트한 후 어떤 응용 프로그램을 시작해야 합니까?
대답: 커널은 어떤 사용자 프로그램을 시작해야 하는지 모르거나 상관하지 않습니다. /sbin/init에 해당하는 init 응용 프로그램만 시작합니다.
분명히 이 애플리케이션은 구성 파일을 읽고 구성 파일에 따라 사용자 프로그램(모니터링, 수동 인터페이스, 태블릿 인터페이스 등)을 시작해야 합니다. 이 질문은 파일 시스템의 내용에 구성 파일이 필요한 /sbin /init와 같은 몇 가지 규칙이 있음을 상기시켜 줍니다.
2. 당신이 작성한 hello 및 world 프로그램에서 사용된 printf를 누가 구현했는지 생각해 본 적이 있습니까?
답변: 이 기능은 귀하가 구현한 것이 아니라 라이브러리 기능에 의해 구현되었습니다. 실행되면 라이브러리를 찾아야 합니다.
이 질문은 파일 시스템에 여전히 라이브러리가 있음을 상기시켜 줍니다. 다음은 간단한 질문과 답변입니다. 더 알고 싶다면 init 프로세스가 무엇을 하는지 알기 위해 busybox의 init.c를 볼 수 있습니다. 물론 루트 파일 시스템 구축에 대한 장도 볼 수 있습니다. .
나의 학습 경험
1. 학창시절 물리학과 전자공학을 전공했습니다. 사실 저는 이 과정에서 회로를 설계하는 방법을 가르치지 않고 전자 회로에 대한 지식만 가르쳤습니다. PCB 설계는 연구실에서 독학으로 배웠다. 2층 기판만 디자인했는데 지금은 거의 잊어버릴 뻔했습니다. 그러나 회로도와 칩 설명서를 읽을 수 있는 기능은 유지됩니다.
2. 저는 소프트웨어 학위를 받았고 소프트웨어 디자인에 관심이 많지만 C 언어와 데이터베이스만 배웠습니다. 나는 관심을 가지고 많은 경쟁 질문을했습니다. 대회에 참가할 수는 없지만 C언어 연습은 탄탄하다.
3. 연구실에서 첫 번째 회사에서 간단한 PCI 카드를 설계하고 Windows 드라이버를 작성했습니다.
4. 두 번째 회사에서는 51개의 단일 칩 마이크로컴퓨터를 카폰으로 사용하여 순수 소프트웨어의 길을 걷기 시작했습니다.
5. 싱글칩 마이크로컴퓨터의 단점을 느끼기 시작했다. 빨간 모자를 작동하는 방법부터 시작하여 닫힌 문 뒤에서 Linux를 배우기 위해 반년 동안 사임했습니다. 단계는 먼저 살펴보고 베어보드 프로그램을 작성하여 하드웨어를 동작시킨 다음 u-boot를 분석하는 것입니다. 동시에 저는 LINUX 프레임워크에 대해 어느 정도 이해하고 있습니다.
베어 보드를 작성할 때 인터럽트에 대한 이해를 강화하는 것이 좋습니다. 커널은 인터럽트를 사용하여 다양한 기능을 완료합니다.
6. u-boot 분석 후 간단한 드라이버 프로그래밍을 시작합니다. 현재로서는 능력이 여전히 매우 약합니다.
7. ZTE에서 일하기 시작하여 2년 동안 일하면서 모든 종류의 드라이버를 작성하고 모든 종류의 문제를 해결(운전 문제, 응용 프로그램 문제를 찾는 데 도움)하고 능력을 단련했습니다.
|
놀라움을 얻으려면 이메일을 입력하십시오.
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> 아프리칸스어
sq.fmuser.org -> 알바니아어
ar.fmuser.org -> 아랍어
hy.fmuser.org -> 아르메니아어
az.fmuser.org -> 아제르바이잔 어
eu.fmuser.org -> 바스크
be.fmuser.org -> 벨로루시 어
bg.fmuser.org -> 불가리아어
ca.fmuser.org -> 카탈로니아 어
zh-CN.fmuser.org -> 중국어 (간체)
zh-TW.fmuser.org -> 중국어 (번체)
hr.fmuser.org -> 크로아티아어
cs.fmuser.org -> 체코
da.fmuser.org -> 덴마크어
nl.fmuser.org -> 네덜란드어
et.fmuser.org -> 에스토니아어
tl.fmuser.org -> 필리피노
fi.fmuser.org -> 핀란드어
fr.fmuser.org -> 프랑스어
gl.fmuser.org -> 갈리시아어
ka.fmuser.org -> 조지아 어
de.fmuser.org -> 독일어
el.fmuser.org -> 그리스
ht.fmuser.org -> 아이티 크리올
iw.fmuser.org -> 히브리어
hi.fmuser.org -> 힌디어
hu.fmuser.org 헝가리어
is.fmuser.org -> 아이슬란드 어
id.fmuser.org -> 인도네시아어
ga.fmuser.org -> 아일랜드어
it.fmuser.org -> 이탈리아어
ja.fmuser.org -> 일본어
ko.fmuser.org -> 한국어
lv.fmuser.org -> 라트비아어
lt.fmuser.org 리투아니아어
mk.fmuser.org -> 마케도니아 어
ms.fmuser.org -> 말레이어
mt.fmuser.org -> 몰타어
no.fmuser.org -> 노르웨이어
fa.fmuser.org -> 페르시아어
pl.fmuser.org -> 폴란드어
pt.fmuser.org -> 포르투갈어
ro.fmuser.org -> 루마니아어
ru.fmuser.org -> 러시아어
sr.fmuser.org -> 세르비아어
sk.fmuser.org -> 슬로바키아어
sl.fmuser.org -> 슬로베니아어
es.fmuser.org -> 스페인어
sw.fmuser.org -> 스와힐리
sv.fmuser.org -> 스웨덴어
th.fmuser.org -> 태국
tr.fmuser.org -> 터키어
uk.fmuser.org -> 우크라이나어
ur.fmuser.org -> 우르두어
vi.fmuser.org -> 베트남어
cy.fmuser.org -> 웨일스 어
yi.fmuser.org -> 이디시어
FMUSER 무선 전송 비디오 및 오디오가 더 쉬워졌습니다!
연락처
주소:
No.305 Room HuiLan Building No.273 Huanpu Road 광저우 중국 510620
카테고리
MMCC 뉴스레터