Ѳ ު, KEOA.KPI.UA/wp/



Russian Ukraine English
Catalog RSS

Íîâèíè
Àá³òóð³ºíòàì >>
Ïðî êàôåäðó >>
Âèêëàäà÷³ >>
Íàâ÷àëüíèé ïðîöåñ >>
Íàóêîâ³ ïðîåêòè
Ñòóäåíòñüê³ ïðîåêòè >>
Ó÷áîâèé öåíòð
Êîíòàêòè >>
  youtube-
 








[24]
ϲ, , ,


ϲ


ϲ ..ѳ
...




   
172 , - .
53 .

²!! 1 ϲ ѳ - KPIDATA.ORG

-
[ ]     » Ñòàæèðîâêà ñòóäåíòîâ êàôåäðû â Êîðåè 




- pdf

Ñòàæóâàííÿ ñòóäåíò³â êàôåäðè â Êîðå¿


Ñòâîðåííÿ ïî÷àòêîâîãî çàâàíòàæóâà÷à îïåðàö³éíî¿ ñèñòåìè òà ïîòðóâàííÿ Linux äëÿ GPS/WiFi òåñòåðà êîìïàí³¿ Tescom

Çâ³ò Çàïîðîæåöà Òàðàñà ³êòîðîâè÷à ïðî ïðîõîäæåííÿ ñòàæóâàííÿ ó Êîðå¿

Òåìà: «Îïåðàöèîííàÿ ñèñòåìà Linux äëÿ âñòðàèâàåìûõ ñèñòåì»

ÂÂÅÄÅÍÈÅ

Íåîáõîäèìîñòü óñêîðåíèÿ âûïóñêà íîâîé ïðîäóêöèè íà ðûíîê è ñíèæåíèÿ îáùåé ñòîèìîñòè ñèñòåì âûíóæäàåò ìíîãèõ ðàçðàáîò÷èêîâ ïðîãðàììíî-àïïàðàòíûõ ïðîäóêòîâ ïðèìåíÿòü ÎÑ Linux è äðóãèå ïðîãðàììíûå ñðåäñòâà ñ îòêðûòûìè èñõîäíûìè êîäàìè. Ïîäîáíîå ðåøåíèå îáóñëîâëåíî òåì, ÷òî, èñïîëüçóÿ îòêðûòîå ïðîãðàììíîå îáåñïå÷åíèå, ðàçðàáîò÷èêè ïîëó÷àþò âîçìîæíîñòü ñêîíöåíòðèðîâàòü óñèëèÿ íà ñîâåðøåíñòâîâàíèè ñâîåé ïðîäóêöèè. Òàêæå ðåøàþùèì ôàêòîðîì ÿâëÿåòñÿ òîò ôàêò, ÷òî Linux ïîääåðæèâàåò áîëüøîå êîëè÷åñòâî ïðîöåññîðíûõ àðõèòåêòóð.  óñëîâèÿõ ìîùíîãî äàâëåíèÿ ñðîêîâ âûõîäà íà ðûíîê, ìîäèôèêàöèÿ ÎÑ äëÿ íîâîãî ïðîöåññîðà èëè ïðîöåññîðíîãî ìîäóëÿ ìîæåò îêàçàòüñÿ ñëèøêîì äëèòåëüíûì ïðîöåññîì, íàëè÷èå æå ãîòîâîé îïåðàöèîííîé ñèñòåìû âåäåò ê ñóùåñòâåííîé ýêîíîìèè âðåìåíè è ñðåäñòâ.

Ñàìàÿ ðàñïðîñòðàíåííàÿ íà ñåãîäíÿ âåðñèÿ Linux ýòî, áåçóñëîâíî, âåðñèÿ äëÿ ïåðñîíàëüíûõ êîìïüþòåðîâ ñîçäàííûõ íà áàçå ïðîöåññîðîâ ñ àðõèòåêòóðîé õ86. Ñîâðåìåííûå ïåðñîíàëüíûå êîìïüþòåðû ýòî íåäîðîãèå ñèñòåìû, ñïîñîáíûå âûñòóïàòü êàê â ðîëè èíñòðóìåíòàëüíûõ, òàê è öåëåâûõ ïëàòôîðì.  ìèðå òàêèå ìàøèíû èñïîëüçóåò áîëüøàÿ ÷àñòü Linux-ðàçðàáîò÷èêîâ, è èìåííî äëÿ ýòèõ êîìïüþòåðîâ ïðåæäå âñåãî è ïèøóòñÿ ðàçëè÷íûå ïðîãðàììû. Ïðîöåññîðû ñåìåéñòâà õ86 ïðèìåíÿþòñÿ íå òîëüêî â ïåðñîíàëüíûõ, íî è âî ìíîãèõ âñòðàèâàåìûõ ñèñòåìàõ.  íàñòîÿùåå âðåìÿ ñóùåñòâóåò ìíîæåñòâî ìîäåëåé õ86-ïðîöåññîðîâ - îò ÷ðåçâû÷àéíî áûñòðîäåéñòâóþùèõ äî ñàìûõ ýêîíîìè÷íûõ. Îäíàêî â îïðåäåëåííûõ ñëó÷àÿõ ïðîöåññîðû õ86 ìîãóò áûòü íå ñàìûì ëó÷øèì âûáîðîì.  òåõ ïðèëîæåíèÿõ, ãäå òðåáóåòñÿ î÷åíü íèçêèé óðîâåíü ýíåðãîïîòðåáëåíèÿ, áîëåå óìåñòíûìè ìîãóò îêàçàòüñÿ ïðîöåññîðû òèïà ARM èëè Hitachi SH, èìåþùèå ïðè ñóùåñòâåííî ìåíüøåé ðàññåèâàåìîé ìîùíîñòè òó æå ïðîèçâîäèòåëüíîñòü.  äðóãèõ ñèòóàöèÿõ ïðåäïî÷òåíèå ñëåäóåò îòäàòü äåøåâûì ìèêðîïðîöåññîðàì, èìåþùèì ÿäðî PowerPC, ñîïðîöåññîð è íåîáõîäèìûé íàáîð ôóíêöèé ââîäà/âûâîäà.  ïðåäïîëàãàþùèõ èíòåíñèâíóþ îáðàáîòêó äàííûõ ñèñòåìàõ îïðàâäàííûì ìîæåò áûòü ïðèìåíåíèå ïðîöåññîðîâ òèïà MIPS, õàðàêòåðèçóþùèõñÿ ëó÷øèì, ÷åì ó õ86, ñîîòíîøåíèåì öåíû è ïðîèçâîäèòåëüíîñòè. Õîðîøàÿ íîâîñòü ñîñòîèò â òîì, ÷òî ÿäðî ÎÑ Linux ïîääåðæèâàåò âñå ýòè òèïû àðõèòåêòóð.

1.  ÏÎÑÒÐÎÅÍÈÅ ÑÈÑÒÅÌÛ ÍÀ ÁÀÇÅ ÏÐÎÖÅÑÑÎÐÀ ARM AT91SAM9G45

1.1.  Îáùèå ñâåäåíèÿ î ïðîöåññîðå

Ìèêðîêîíòðîëëåð AT91SAM9G45 âûïîëíåí íà îñíîâå ÿäðà ARM926EJ-S è èíòåãðèðóåò íàèáîëåå âîñòðåáîâàííûé íàáîð ìîäóëåé äëÿ îðãàíèçàöèè ïîëüçîâàòåëüñêîãî èíòåðôåéñà è âûñîêîñêîðîñòíîé ïåðåäà÷è äàííûõ, â ò.÷. êîíòðîëëåð ÆÊ-äèñïëåÿ, êîíòðîëëåð ðåçèñòèâíîãî ñåíñîðíîãî ýêðàíà, èíòåðôåéñ êàìåðû, àóäèî èíòåðôåéñ, êîíòðîëëåð Ethernet 10/100 è âûñîêîñêîðîñòíûå èíòåðôåéñû USB è SDIO. Èìåÿ â ñâîåì àðñåíàëå ïðîöåññîð, ðàáîòàþùèé íà ÷àñòîòå 400 ÌÃö, è íåñêîëüêî êîììóíèêàöèîííûõ èíòåðôåéñîâ ñ áûñòðîäåéñòâèåì ñâûøå 100 Ìáèò/ñåê, AT91SAM9G45 îáëàäàåò âñåìè âîçìîæíîñòÿìè, êîòîðûå íåîáõîäèìû äëÿ ðåàëèçàöèè ñåòåâûõ ôóíêöèé è ôóíêöèé ëîêàëüíîãî õðàíåíèÿ äàííûõ.

AT91SAM9G45 ïîääåðæèâàåò èíòåðôåéñû ïîñëåäíåãî ïîêîëåíèÿ ÈÑ çàïîìèíàþùèõ óñòðîéñòâ DDR2 è NAND Flash è ìîæåò èñïîëüçîâàòü èõ êàê äëÿ õðàíåíèÿ êîäà ïðîãðàììû, òàê è äëÿ õðàíåíèÿ äàííûõ. Âíóòðåííÿÿ 133-ìåãàãåðöîâàÿ ìíîãîñëîéíàÿ øèííàÿ àðõèòåêòóðà â ñâÿçêå ñ 37 êàíàëàìè DMA, äâóìÿ âíåøíèìè øèííûìè èíòåðôåéñàìè è ðàñïðåäåëåííîé ïàìÿòüþ, â ò.÷. 64 - êáàéò SRAM, êîòîðûå ìîæíî íàñòðîèòü êàê TCM-ïàìÿòü, îáåñïå÷èâàåò âñþ íåîáõîäèìóþ äëÿ ïðîöåññîðà è âûñîêîñêîðîñòíûõ óñòðîéñòâ ââîäà-âûâîäà ïðîïóñêíóþ ñïîñîáíîñòü.

Èíòåðôåéñû ââîäà-âûâîäà ìîãóò ðàáîòàòü ïðè íàïðÿæåíèè 1.8 Â èëè 3.3 Â. Ïðåäóñìîòðåíà îòäåëüíàÿ ïîäà÷à íàïðÿæåíèÿ ïèòàíèÿ äëÿ èíòåðôåéñîâ çàïîìèíàþùèõ óñòðîéñòâ è óñòðîéñòâ ââîäà-âûâîäà. Äàííàÿ âîçìîæíîñòü ïîëíîñòüþ èñêëþ÷àåò ïîòðåáíîñòü â óñòàíîâêå âíåøíèõ ÈÑ äëÿ ïðåîáðàçîâàíèÿ óðîâíåé. Ó ìèêðîêîíòðîëëåðà èñïîëüçóåòñÿ øàã âûâîäîâ 0.8 ìì, ÷òî óäåøåâëÿåò ïðîèçâîäñòâî ïå÷àòíîé ïëàòû.

Êîíòðîëëåð óïðàâëåíèÿ ýëåêòðîïîòðåáëåíèåì AT91SAM9G45 ïîçâîëÿåò ýôôåêòèâíî óïðàâëÿòü ñèãíàëàìè ñèíõðîíèçàöèè è ñîäåðæèò äîìåí ñ áàòàðåéíûì ðåçåðâèðîâàíèåì ïèòàíèÿ.

1.2. Çàãðóç÷èê ïåðâîãî óðîâíÿ AT91Bootstrap

1.2.1.  Îáùèå ñâåäåíèÿ î çàãðóç÷èêå

 ìèêðîêîíòðîëëåðàõ ARM9 êîìïàíèè Atmel äëÿ çàãðóçêè ïðèëîæåíèé ïîëüçîâàòåëÿ èñïîëüçóåòñÿ ñïåöèàëèçèðîâàííûé çàãðóç÷èê ïîä íàçâàíèåì AT91Bootstrap. Öåëüþ ýòîãî çàãðóç÷èêà ÿâëÿåòñÿ èíèöèàëèçàöèÿ áàçîâîé ïåðèôåðèè(GPIO, SDRAM, IRQ è ò.ä), çàãðóçêà ïðèëîæåíèÿ ïîëüçîâàòåëÿ èç âíåøíåãî Flash íàêîïèòåëÿ è ïåðåäà÷à óïðàâëåíèÿ çàãðóæåííîìó ïðèëîæåíèþ.Ñàì AT91Bootstrap õðàíèòñÿ â ýíåðãîíåçàâèñèìîéïàìÿòè, ýòîé ïàìÿòüþ ìîæåò áûòü: âíóòðåííÿÿ Flash ïàìÿòü ìèêðîïðîöåññîðà, ïîñëåäîâàòåëüíàÿ Dataflash-ïàìÿòü, ïàðàëëåëüíàÿ NAND-ïàìÿòü èëè SD/MMC-êàðòà ïàìÿòè.

Ìîæåò âîçíèêíóòü âîïðîñ "êóðèöû è ÿéöà": «Êòî çàãðóæàåò çàãðóç÷èê AT91Bootstrap?». Äåëî â òîì, ÷òî âñå ìèêðîïðîöåññîðû ARM9 êîìïàíèè Atmel èìåþò âñòðîåííûé çàãðóç÷èê íóëåâîãî óðîâíÿ RomBoot. Íàõîäèòñÿ çàãðóç÷èê âî âíóòðåííåé ROM-ïàìÿòè ìèêðîïðîöåññîðà. Çàäà÷à RomBoot ñîñòîèò â èíèöèàëèçàöèè âíåøíèõ íîñèòåëåé èíôîðìàöèè è ïîèñêà AT91Bootstrap-à. Íèæå, íà ðèñ. 1.1. ïðèâåäåíà ïîñëåäîâàòåëüíîñòü ïîèñêà AT91Bootstrap-à.

9263_rom_boot_sequence.png

Ðèñ.1.1. Ïîñëåäîâàòåëüíîñòü ïîèñêà AT91Bootstrap-à

 òîì ñëó÷àå, åñëè çàãðóç÷èêó RomBoot íå óäàëîñü íàéòè AT91Bootstrap, ïåðâûé ïåðåõîäèò â ðåæèì âîññòàíîâëåíèÿ SAM-BA Boot.  ýòîì ðåæèìå èíèöèàëèçèðóþòñÿ èíòåðôåéñûUSB è UART äëÿ ïðèåìà êîìàíä. Ñ ïîìîùüþ ñïåöèôè÷åñêèõ êîìàíä ìîæåò ïðîèçâîäèòüñÿ çàïèñü çàãðóç÷èêà AT91Bootstrap è äðóãèõ äàííûõ ïîëüçîâàòåëÿ âî âíåøíþþ Flash-ïàìÿòü. Òàêèì îáðàçîì, âî âñåõ ìèêðîêîíòðîëëåðàõ ARM9 êîìïàíèè Atmel ïðåäóñìîòðåí ðåæèì âîññòàíîâëåíèÿ.

1.2.2.  Ïîäãîòîâêà ê êîìïèëÿöèè çàãðóç÷èêà

Ïåðåä òåì êàê ïðèñòóïèòü ê ðàáîòå ñ çàãðóç÷èêà AT91Bootstrap, íåîáõîäèìî óñòàíîâèòü ìèíèìàëüíûé íàáîð óòèëèò, êîìïèëÿòîð è íàñòðîèòü ïåðåìåííûå îêðóæåíèÿ. Èç äîïîëíèòåëüíûõ óòèëèò íåîáõîäèìî óñòàíîâèòü make. Äëÿ êîìïèëèðîâàíèÿ èñïîëüçóåòñÿ êîìïèëÿòîð Sourcery G++ Lite2011.03-42 for ARM EABI. Âñå ðàáîòû ïðîâîäèëèñü íà äèñòðèáóòèâå Ubuntu 10.04.3 ñ îáíîâëåííûì ÿäðîì äî âåðñèè 2.6.38-10.

Äëÿ íà÷àëà íóæíî ñîçäàòü äèðåêòîðèþ, â êîòîðîé áóäóò ïðîâîäèòüñÿ âñå ðàáîòû:

  1. taras@taras-desktop:~/tescom$ mkdir example
  2. taras@taras-desktop:~/tescom$ cd example/
  3. Ïîñëå ýòîãî íåîáõîäèìî ñêà÷àòü AT91Bootstrap, óñòàíîâèòü êîìïèëÿòîð è make:
  4. taras@taras-desktop:~/tescom/example$ wget http://www.atmel.com/dyn/resources/prod_documents/AT91Bootstrap1.16.zip
  5. taras@taras-desktop:~/tescom/example$ unzip AT91Bootstrap1.16.zip
  6. taras@taras-desktop:~/tescom/example$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package8736/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi.bin
  7. taras@taras-desktop:~/tescom/example$ chmod 777 arm-2011.03-42-arm-none-eabi.bin
  8. taras@taras-desktop:~/tescom/example$ ./arm-2011.03-42-arm-none-eabi.bin
  9. taras@taras-desktop:~/tescom/example$ sudo apt-get install make

1.2.3.  Ïîäãîòîâêà ê êîìïèëÿöèè çàãðóç÷èêà

Çàãðóç÷èê ïåðâîãî óðîâíÿ AT91Bootstrap íå ïðåäíàçíà÷åí äëÿ çàãðóçêè îáðàçà ÿäðà Linux. Ïðåäïîëàãàåòñÿ, ÷òî AT91Bootstrap ñêîíôèãóðèðóåò âíåøíþþ äèíàìè÷åñêóþ ïàìÿòü, ñêîïèðóåò òóäà çàãðóç÷èê âòîðîãî óðîâíÿ è ïåðåäàñò åìó óïðàâëåíèå. Çàãðóç÷èêîì âòîðîãî óðîâíÿ ìîæåò âûñòóïàòü U-boot äëÿ çàãðóçêè Linux, èëè EBOOT –äëÿ Windows CE. Íî èñïîëüçîâàíèå çàãðóç÷èêà âòîðîãî óðîâíÿ óâåëè÷èâàåò ðàçìåð ñèñòåìû è âðåìÿ çàãðóçêè, à òàêæå íåñåò äîïîëíèòåëüíóþ íàãðóçêó íà ðàçðàáîò÷èêà ïðîãðàììíîãî îáåñïå÷åíèÿ. Íèæå áóäåò îïèñàí ïðîöåññ ìîäèôèöèðîâàíèÿ AT91Bootstrap äëÿ çàãðóçêè zImage îáðàçà ÿäðà.

Äëÿ çàïóñêà ÿäðà Linux íåîáõîäèìî ñêîïèðîâàòü åãî îáðàç èç âíåøíåé Flash ïàìÿòè â ÎÇÓ, çàïðåòèòü ïðåðûâàíèÿ â çàãðóç÷èêå, îòêëþ÷èòü êýø, çàãðóçèòü â ðåãèñòð R0 íîëü,R1 –èäåíòèôèêàòîð ïëàòôîðìû, R2 – àäðåñ íà÷àëà àðãóìåíòîâ çàãðóçêè ÿäðà.  ñîîòâåòñòâèè ñî ñïåöèôèêàöèåé EABI ýòè ðåãèñòðû èñïîëüçóþòñÿ äëÿ ïåðåäà÷è ïàðàìåòðîâ â ôóíêöèþ. Ñîîòâåòñòâåííî, ñîçäàâ óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ ïðèíèìàåò òðè ïàðàìåòðà, ïðèñâîèâ ýòîìó óêàçàòåëþ àäðåñ ÿäðà â ÎÇÓ ìîæíî ïåðåäàòü óïðàâëåíèå ÿäðó ñ çàäàííûìè ïàðàìåòðàìè. Òàêæå â çàãðóç÷èêå íóæíî èçìåíèòü ïàðàìåòðû îáðàçà ÿäðà.

Äëÿ âíåñåíèé èçìåíåíèé íóæíî ñäåëàòü ñëåäóþùåå:

•  Ïåðåéòè â äèðåêòîðèþ ñ AT91Bootstrap è äîáàâèòü â main.c ïåðåä îïåðàòîðîì return ñëåäóþùåå:

  1. {
  2. void (*theKernel)(int zero, int arch, unsigned intparams);
  3. dbg_print("Run Linux...n");
  4. theKernel = (void (*)(int, int, unsigned int))JUMP_ADDR;
  5. theKernel(0, MACH_TYPE, 0);
  6. }
  7. taras@taras-desktop:~/tescom/example$ cd Bootstrap-v1.16/
  8. taras@taras-desktop:~/tescom/example/Bootstrap-v1.16$ nanomain.c

•  Âíåñòè èçìåíåíèÿ â êîíôèãóðàöèîííûé ôàéë at91sam9m10g45ek.h, äëÿ ïëàòôîðìû èçìåíèâ ñëåäóþùèå îïðåäåëåíèÿ:

  • #define IMG_SIZE 0x300000 /* Image Size in DataFlash */
  • #define JUMP_ADDR 0x70008000 /* Final Jump Address */
  • #define CFG_DEBUG
  • #define DEBUG
  • taras@taras-desktop:~/tescom/example/Bootstrap-v1.16$ cd board/at91sam9m10g45ek/dataflash/
  • taras@taras-desktop:~/tescom/example/Bootstrap-v1.16/board/at91sam9m10g45ek/dataflash$ nano at91sam9m10g45ek.h

•  Ïîñëå ýòèõ èçìåíåíèé ìîæíî ïðèñòóïèòü ê êîìïèëÿöèè, ðåçóëüòàòîì âûïîëíåíèÿ áóäåò dataflash_at91sam9m10g45ek.bin â ïàïêå ñ Makefile

  • taras@taras-desktop:~/tescom/example/Bootstrap-v1.16/board/at91sam9m10g45ek/dataflash$ make clean
  • taras@taras-desktop:~/tescom/example/Bootstrap-v1.16/board/at91sam9m10g45ek/dataflash$ make CROSS_COMPILE=arm-none-eabi-

1.3.  ßäðî Linux

1.3.1.  Îáùèå ñâåäåíèÿ

Ïðîöåññ çàãðóçêè â ñèñòåìå Linux âêëþ÷àåò â ñåáÿ íåñêîëüêî ñòàäèé. Îäíàêî âíå çàâèñèìîñòè îò òîãî, âûïîëíÿåòñÿ ëè çàãðóçêà íà ñòàíäàðòíîì ïåðñîíàëüíîì êîìïüþòåðå ñ àðõèòåêòóðîé x86 èëè æå âî âñòðàèâàåìîé ñèñòåìå, ïðîöåññ çàãðóçêè îêàçûâàåòñÿ â çíà÷èòåëüíîé ñòåïåíè îäèíàêîâûì.

Ïîñëå òîãî êàê îáðàç ÿäðà îêàçûâàåòñÿ â ïàìÿòè è åìó ïåðåäàåòñÿ óïðàâëåíèå îò çàãðóç÷èêà 2-é ñòóïåíè, íàñòóïàåò ñòàäèÿ ÿäðà. Îäíàêî îáðàç íå ÿâëÿåòñÿ èñïîëíÿåìûì, ýòî ñæàòûé îáðàç ÿäðà. Îáû÷íî ýòî zImage (ñæàòûé îáðàç ðàçìåðîì ìåíåå 512KB) èëè bzImage (áîëüøîé ñæàòûé îáðàç, ðàçìåðîì áîëåå 512KB), êîòîðûé áûë ñæàò ïðè ïîìîùè zlib.  íà÷àëå òàêîãî îáðàçà ðàñïîëàãàåòñÿ ïðîãðàììà, êîòîðàÿ âûïîëíÿåò ìèíèìàëüíóþ íàñòðîéêó àïïàðàòíîãî îáåñïå÷åíèÿ è çàòåì ðàñïàêîâûâàåò ÿäðî, õðàíÿùååñÿ âíóòðè îáðàçà è ïîìåùàåò åãî â âåðõíþþ îáëàñòü ïàìÿòè. Åñëè èìååòñÿ îáðàç íà÷àëüíîãî RAM-äèñêà, òî ïðîãðàììà òàêæå ïåðåìåùàåò åãî â ïàìÿòü è ïîìå÷àåò äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ, à çàòåì âûçûâàåò ñàìî ÿäðî, ïîñëå ÷åãî íà÷èíàåòñÿ åãî çàãðóçêà.

Ïðè âûçîâå bzImage (îáðàç äëÿ ARM) âûïîëíåíèå íà÷èíàåòñÿ â./arch/arm/boot/head.Sñ àññåìáëåðíîé ôóíêöèè. Ýòà ïðîãðàììà âûïîëíÿåò îñíîâíóþ íàñòðîéêó àïïàðàòíîãî îáåñïå÷åíèÿ è âûçûâàåò ïðîöåäóðóstartup_32, ðàñïîëàãàþùóþñÿ â ./arch/arm/boot/compressed/head.S. Ïðîöåäóðà íàñòðàèâàåò áàçîâóþ ñðåäó (ñòåê è ò.ï.) è î÷èùàåò BlockStartedbySymbol (BSS). Çàòåì âûïîëíÿåòñÿ äåêîìïðåññèÿ ÿäðà ïðè ïîìîùè âûçîâà C-ôóíêöèèdecompress_kernel(êîòîðàÿ õðàíèòñÿ â ./arch/arm/boot/compressed/misc.c). Ïîñëå äåêîìïðåññèè ÿäðà â ïàìÿòü ïðîèñõîäèò åãî âûçîâ. Ýòî åùå îäíà ôóíêöèÿ startup_32, íî îíà ðàñïîëàãàåòñÿ â ôàéëå ./arch/arm/kernel/head.S.

 íîâîé ôóíêöèèstartup_32 (êîòîðàÿ íàçûâàåòñÿ swapper èëè process 0) èíèöèàëèçèðóþòñÿ òàáëèöû ñòðàíèö (pagetables) è îáåñïå÷èâàåòñÿ ïîäêëþ÷åíèå ôóíêöèè memorypaging (îòîáðàæåíèå ñòðàíèö). Òàêæå îïðåäåëÿåòñÿ òèï öåíòðàëüíîãî ïðîöåññîðà è ñîïðîöåññîðà äëÿ âû÷èñëåíèé ñ ïëàâàþùåé òî÷êîé (FPU), åñëè îí èìååòñÿ, è äàííàÿ èíôîðìàöèÿ ñîõðàíÿåòñÿ äëÿ ïîñëåäóþùåãî èñïîëüçîâàíèÿ. Äàëåå âûçûâàåòñÿ ôóíêöèÿstart_kernel èç(init/main.c), êîòîðàÿ îñóùåñòâëÿåò ïåðåõîä â òó ÷àñòü ÿäðà Linux, êîòîðàÿ íå çàâèñèò îò îñîáåííîñòåé êîíêðåòíîé àïïàðàòíîé ïëàòôîðìû. Ìîæíî ñêàçàòü, ÷òî ýòî ôóíêöèÿ main äëÿ ÿäðà Linux.

Ïðè îáðàùåíèè ê start_kernel âûçûâàåòñÿ äëèííûé ñïèñîê ôóíêöèé èíèöèàëèçàöèè, êîòîðûå âûïîëíÿþò íàñòðîéêó ïðåðûâàíèé, ïðîèçâîäÿò äàëüíåéøåå êîíôèãóðèðîâàíèå ïàìÿòè è çàãðóæàþò íà÷àëüíûé RAM-äèñê. Ïîñëå ýòîãî âûçûâàåòñÿ ôóíêöèÿ kernel_thread (èç arch/arm/kernel/process.c), çàïóñêàþùàÿ ôóíêöèþ init, êîòîðàÿ ÿâëÿåòñÿ ïåðâûì ïðîöåññîì, âûïîëíÿþùèìñÿ â ïðîñòðàíñòâå ïîëüçîâàòåëÿ.  çàêëþ÷åíèå çàïóñêàåòñÿ idletask, ïîñëå ÷åãî óïðàâëåíèå ìîæåò âçÿòü íà ñåáÿ ïëàíèðîâùèê (scheduler) (ïîñëå âûçîâà cpu_idle). Åñëè ðàçðåøåíû ïðåðûâàíèÿ, âûòåñíÿþùèé ïëàíèðîâùèê (pre-emptivescheduler) áóäåò ïåðèîäè÷åñêè ïåðåõâàòûâàòü êîíòðîëü äëÿ ïîääåðæêè ìíîãîçàäà÷íîñòè.

Ïîñëå çàãðóçêè ÿäðà ìîíòèðóåòñÿ êîðíåâàÿ ôàéëîâàÿ ñèñòåìà è çàïóñêàåòñÿ ïåðâîå ïðèëîæåíèå â ïðîñòðàíñòâå ïîëüçîâàòåëÿ. Ýòî ïåðâàÿ èç âûçûâàåìûõ ïðîãðàìì, êîòîðûå ñêîìïèëèðîâàíû ñî ñòàíäàðòíîé áèáëèîòåêîé C. Äî ýòîãî ìîìåíòà ïðîöåññà ñòàíäàðòíûå C-ïðèëîæåíèÿ åùå íå âûïîëíÿëèñü.

1.3.2.  Ïîäãîòîâêà ê êîìïèëÿöèè ÿäðà

Äëÿ ñáîðêè ÿäðà íåîáõîäèìî óñòàíîâèòü áàçîâûé íàáîð óòèëèò è êîìïèëÿòîð, à òàêæå ñêà÷àòü ñàìî ÿäðî. Íèæå ïðèâåäåíà ïîñëåäîâàòåëüíîñòü äåéñòâèé:

•  Óñòàíàâëèâàåì íåîáõîäèìûå óòèëèòû èç ðåïîçèòîðèÿ:

  • taras@taras-desktop:~/tescom/example$ sudo apt-get install make flex bison m4 ncurses-devgettext texi2html texinfo zlib1g zlib1g-dev
  • taras@taras-desktop:~/tescom/example$ sudo apt-get install liblzo2-2 liblzo2-dev libacl1 libacl1-dev libglib2.0-dev autoconfautomakelibtool

•  Ñêà÷èâàåì è ðàñïàêîâûâàåì ÿäðî:

  • taras@taras-desktop:~/tescom/example$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.6.tar.bz2
  • taras@taras-desktop:~/tescom/example$ tar xvjf linux-2.6.37.6.tar.bz2

•  Ñêà÷èâàåì è óñòàíàâëèâàåì êîìïèëÿòîð:

  • taras@taras-desktop:~/tescom/example$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package8741/public/arm-none-linux-gnueabi/arm-2011.03-41-arm-none-linux-gnueabi.bin
  • taras@taras-desktop:~/tescom/example$ chmod 777 arm-2011.03-41-arm-none-linux-gnueabi.bin
  • taras@taras-desktop:~/tescom/example$ ./arm-2011.03-41-arm-none-linux-gnueabi.bin

•  Ñêà÷èâàåì áàçîâóþ êîíôèãóðàöèþ ÿäðà äëÿ íàøåé àðõèòåêòóðû:

  • taras@taras-desktop:~/tescom/example$ wget ftp://www.at91.com/pub/linux/2.6.30-at91/at91sam9m10g45ek_defconfig
  • taras@taras-desktop:~/tescom/example$ cp at91sam9m10g45ek_defconfig ./linux-2.6.37.6/.config

•  Êîíôèãóðèðóåì ÿäðî êîìàíäîé:

  • taras@taras-desktop:~/tescom/example/linux-2.6.37.6$ make ARCH=arm menuconfig
  • è âûñòàâëÿåì ñëåäóþùèå ïóíêòû ìåíþ:
  • SystemType --->
  • Atmel AT91 System-on-Chip --->
  • Atmel AT91 Processor (cpu name) --->AT91SAM9G45 – âûáðàòü
  • Boot options --->
  • Always use the default kernel command string – âûáðàòü
  • Default kernel command string: mem=64M console=ttyS0,115200 root=/dev/sda1 rootwait
  • Device Drivers --->
  • Input device support --->
  • Polled input device skeleton – âûáðàòüêàêâñòðàèâàåìûé
  • Graphics support --->
  • Console display driver support --->
  • Framebuffer Console support – âûáðàòüêàêâñòðàèâàåìûé
  • Map the console to the primary display device – âûáðàòü
  • Select compiled-in fonts – âûáðàòü
  • VGA 8x8 font - select this
  • Bootup logo – âûáðàòü
  • Bootuplogo --->
  • Standard black and white Linux logo – îòêëþ÷èòü
  • Standard 16-color Linux logo - îòêëþ÷èòü
  • HID Devices --->
  • USB Human Interface Device support – âûáðàòüêàêâñòðàèâàåìûé
  • File systems --->
  • Ext3 journalling file system support – âûáðàòüêàêâñòðàèâàåìûé
  • The Extended 4 (ext4) filesystem – âûáðàòüêàêâñòðàèâàåìûé

•  Êîìïèëèðóåì ÿäðî:

taras@taras-desktop:~/tescom/example/linux-2.6.37.6$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

1.4  Êîðíåâàÿ ôàéëîâàÿ ñèñòåìà

1.4.1 Êîíôèãóðèðîâàíèå è êîìïèëÿöèÿ êîðíåâîé ôàéëîâîé ñèñòåìû

Buildroot ýòî íàáîð èíñòðóìåíòîâ, â îñíîâå êîòîðûõ ëåæèò òðàäèöèîííûé makefile, ïîçâîëÿþùèé ñîáðàòü ñèñòåìó ïîä x86, PowerPC, ARM, AVR, MIPS è ò.ä. Ñèñòåìà ñòðîèòñÿ íà áàçå uClibc – ëåãêîâåñíîãî è ëåãêî ïîðòèðóåìîãî âàðèàíòà áàçîâîé Ñ-áèáëèîòåêè – è BusyBox – àãðåãàòîðà, âêëþ÷àþùåãî â ñåáÿ ôóíêöèîíàë áîëüøèíñòâà óòèëèò òðàäèöèîííîãî îêðóæåíèÿ Linux (ýòî ïîçâîëÿåò ñîêðàòèòü êàê îáúåì êîäà, òàê è âðåìÿ çàãðóçêè ïðîãðàììû â îïåðàòèâíóþ ïàìÿòü).

Äëÿ ïîñòðîåíèÿ êðîññêîìïèëÿòîðà è ôàéëîâîé ñèñòåìû íóæíî ïðîäåëàòü ñëåäóþùåå:

•  Ñêà÷èâàåì è ðàñïàêîâûâàåì ÿäðî:

  • taras@taras-desktop:~/tescom/example$ wget http://buildroot.uclibc.org/downloads/buildroot-2011.08.tar.bz2
  • taras@taras-desktop:~/tescom/example$ tar xvjf buildroot-2011.08.tar.bz2

•  Çàïóñêàåì êîíôèãóðàòîð Buildroot è óñòàíàâëèâàåì ñëåäóþùèå ïóíêòû

  • taras@taras-desktop:~/tescom/example$ cd buildroot-2011.08
  • taras@taras-desktop:~/tescom/example/ buildroot-2011.08$ make menuconfig
  • Target Architecture (name) --->arm - âûáðàòü
  • Target Architecture Variant (name) --->arm926t - âûáðàòü
  • Toolchain --->
  • Kernel Headers (name) --->
  • Linux 2.6.37.x kernel headers - âûáðàòü
  • Enable large file (files > 2 GB) support - âûáðàòü
  • Enable WCHAR support - âûáðàòü
  • Enable C++ support - âûáðàòü
  • Package Selection for the target --->
  • Graphic libraries and applications (graphic/text) --->
  • Qt - select this
  • Qt --->
  • Library type (name) --->
  • Static Library - âûáðàòü
  • Approve free license - âûáðàòü
  • Keyboard drivers --->
  • tty - âûáðàòü
  • linux input - âûáðàòü
  • Text editors and viewers --->nano – âûáðàòü

•  Çàïóñêàåì êîìïèëÿöèþ ôàéëîâîé ñèñòåìû:

taras@taras-desktop:~/tescom/example/buildroot-2011.08$ make

Ðåçóëüòàòîì áóäåò àðõèâ ñ ôàéëîâîé ñèñòåìîé( output / images / root . tar )

1.4.2. Êðîññêîìïèëÿöèÿ ïðèëîæåíèÿ íà îñíîâå Qt.

Äëÿ ïðèìåðà òàêæå îïèñàí ïðîöåññ êðîññêîîìïèëÿöèè ïðèëîæåíèå íà Qt. ×òîáû íå îïèñûâàòü ñîçäàíèå ïðèëîæåíèÿ âîçüìåì ïðèìåð analogclock èç èñõîäíèêîâ Qt. Äëÿ ñáîðêè íåîáõîäèìî ïðîäåëàòü ñëåäóþùåå:

•  Ïåðåõîäèì â äèðåêòîðèþ ñ ïðîåêòîì:

  • taras@taras-desktop:~/tescom/example/buildroot-2011.08$ cd output/build/qt-4.7.3/examples/widgets/analogclock/

•  Ñîçäàåì ôàéë ïðîåêòà, Makefile è çàïóñêàåì ïðîöåññ êîìïèëÿöèè:

  • taras@taras-desktop:~/tescom/example/buildroot-2011.08/output/build/qt-4.7.3/examples/widgets/analogclock$ ../../../bin/qmake -project
  • taras@taras-desktop:~/tescom/example/buildroot-2011.08/output/build/qt-4.7.3/examples/widgets/analogclock$ ../../../bin/qmake
  • taras@taras-desktop:~/tescom/example/buildroot-2011.08/output/build/qt-4.7.3/examples/widgets/analogclock$ make

Ðåçóëüòàòîì áóäåò ôàéë analogclock â äèðåêòîðèè ñ ïðîåêòîì.

•  Ïðîøèâêà öåëåâîé ñèñòåìû ñîáðàííûìè îáðàçàìè

Ïîñëå âñåõ ïðîäåëàííûõ îïåðàöèé áûëè ñîçäàíû áèíàðíûå îáðàçû çàãðóç÷èêà( Bootstrap - v 1.16/ board / at 91 sam 9 m 10 g 45 ek / dataflash / dataflash _ at 91 sam 9 m 10 g 45 ek . bin ), ÿäðà ( linux -2.6.37.6/ arch / arm / boot / zImage ) è àðõèâ ñ ñîäåðæèìûì êîðíåâîé ôàéëîâîé ñèñòåìû( example / buildroot -2011.08/ output / images / root . tar ).

Äëÿ ïðîøèâêè ìèêðîïðîöåññîðîâ ARM êîìïàíèè Atmel ïðåäíàçíà÷åíà ñïåöèàëüíàÿ óòèëèòà SAM - BA . Äëÿ îòëàäêè ïðîåêòà ÿäðî è çàãðóç÷èê áóäóò ðàçìåùåíû â DataFlash , à êîðíåâàÿ ôàéëîâàÿ ñèñòåìà íà USB Flash íàêîïèòåëå. Ïðèñòóïèì ê ïðîöåññó óñòàíîâêè SAM - BA .

•  Äëÿ íà÷àëà íóæíî ñêà÷àòü, ðàñïàêîâàòü è íàçíà÷èòü ïðàâà SAM - BA :

  • taras@taras-desktop:~/tescom/example$ wget http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.10.zip
  • taras@taras-desktop:~/tescom/example$ unzip sam-ba_2.10.zip
  • taras@taras-desktop:~/tescom/example$ cd sam-ba_cdc_linux/
  • taras@taras-desktop:~/tescom/example/sam-ba_cdc_linux$ chmod 777 sam-ba

•  Ïîäêëþ÷èòü îòëàäî÷íóþ ïëàòó ê êîìïüþòåðó ÷åðåç USB è ñîçäàòü ññûëêó íà ñèìâîëüíîå óñòðîéñòâî / dev / ttyACM 0 è çàïóñòèòü ïðîãðàììó:

  • taras@taras-desktop:~/tescom/example/sam-ba_cdc_linux$ sudo ln -s /dev/ttyACM0 /dev/ttyUSB0
  • taras@taras-desktop:~/tescom/example/sam-ba_cdc_linux$ ./sam-ba

•  Ïîñëå çàïóñêà óòèëèòû íå ýêðàíå ïîÿâèòñÿ îêíî ñ âûáîðîì ñîåäèíåíèÿ è òèïà îòëàäî÷íîé ïëàòû, â íåì íóæíî âûáðàòü ñîåäèíåíèå :/ dev / ttyUSB , ïëàòó: at 91 sam 9 m 10- g 45- ek , êàê ïîêàçàíî íà ðèñ. 1.2. Ïîñëå ýòîãî íàæàòü Connect .

C:UserstarasDropboxPhotosScreenshot-SAM-BA CDC 2.10 .png

Ðèñ.1.2. Îêíî âûáîðà ñîåäèíåíèÿ è òèïà îòëàäî÷íîé ïëàòû

•  Ïðè óñïåøíîì ïîäêëþ÷åíèè íà ýêðàíå äîëæíî ïîÿâèòüñÿ ãëàâíîå îêíî ïðîãðàììû.  íåì íóæíî âûáðàòü âêëàäêó DataFlash AT 45 DB / DCB , íà ýòîé âêëàäêå íàéòè ïîëå Scripts è â ñïèñêå âûáðàòü Enable Dataflash  ( SPI 0  CS 0) è íàæàòü Execute , êàê ïîêàçàíî íà ðèñ.1.3.

Ðèñ.1.3. Ýëåìåíòû äëÿ èíèöèàëèçàöèè ïàìÿòè

•  Ïîñëå ýòîãî ìîæíî ïðèñòóïàòü ê ïðîøèâêå çàãðóç÷èêà è ÿäðà.  ñïèñêå ïîëÿ Scripts âûáðàòü Send Boot File è íàæàòü Execute , ïîñëå ýòîãî ïîÿâèòñÿ ìåíþ äëÿ âûáîðà ôàéëà è íóæíî óêàçàòü ðàñïîëîæåíèå áèíàðíîãî ôàéëà çàãðóç÷èêà ( Bootstrap - v 1.16/ board / at 91 sam 9 m 10 g 45 ek / dataflash / dataflash _ at 91 sam 9 m 10 g 45 ek . bin ). Ïîñëå ýòîãî â ïîëå Adddress óñòàíîâèòü 0 x 8400, â ñòðîêå Send File Name íàæàòü íà êíîïêó ñ èçîáðàæåíèÿì ïàïêè è óêàçàòü ïóòü ê îáðàçó ÿäðà( linux -2.6.37.6/ arch / arm / boot / zImage ) è íàæàòü êíîïêó Send File, êàê ïîêàçàíî íà ðèñ.1.4.

Ðèñ.1.4. Ýëåìåíòû óïðàâëåíèÿ SAM - BA äëÿ ïðîøèâêè Dataflash

•  Äëÿ çàïèñè ôàéëîâîé ñèñòåìû äîñòàòî÷íî ñêîïèðîâàòü ñîäåðæèìîå àðõèâà / root . tar íà USB Flash íàêîïèòåëü ñ ôàéëîâîé ñèñòåìîé Ext 2/3/4, ñêîïèðîâàòü ïðèëîæåíèå analogclock â êîðíåâîé êàòàëîã USB Flash . À òàêæå îòðåäàêòèðîâàòü ôàéë / etc / inittab . Äîáàâèâ ñëåäóþùèå ñòðîêè ïîñëå ñòðîêè ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100:

# Set up a couple of getty's

tty1::respawn:/sbin/getty 38400 tty1

tty2::respawn:/sbin/getty 38400 tty2

Ïîñëå ïîäêëþ÷åíèÿ USB -êëàâèàòóðû è USB Flash íàêîïèòåëÿ, è ïåðåçàãðóçêè ïëàòû íà ýêðàíå äîëæåí ïîÿâèòüñÿ ïèíãâèí (ðèñ. 1.5), à ÷åðåç íåñêîëüêî ñåêóíä ïðèãëàøåíèå ê âõîäó â ñèñòåìó

F:DCIM101_FUJIDSCF2044.JPG

Ðèñ. 1.5. Linux â ïðîöåññå çàãðóçêè

Äëÿ âõîäà â ñèñòåìó äîñòàòî÷íî ââåñòè èìÿ ïîëüçîâàòåëÿ “ root ” Äëÿ çàïóñêà ïðèëîæåíèÿ Qt íåîáõîäèìî â êîìàíäíîé ñòðîêå íàáðàòü ñëåäóþùåå:

#/./ analogclock – qws . Ïîñëå çàãðóçêè ïðèëîæåíèÿ íà ýêðàíå ïîÿâèòñÿ îêíî ïðèëîæåíèÿ, êàê íà ðèñ. 1.6.

Ðèñ. 1.6. Qt ïðèëîæåíèå, çàïóùåííîå íà îòëàäî÷íîé ïëàòå

ÂÛÂÎÄÛ

 äàííîì îò÷åòå ïîêàçàíî êàê ñîáðàòü Linux ñ áàçîâûì íàáîðîì óòèëèò è ïðèëîæåíèåì íà îñíîâå Qt äëÿ ARM -àðõèòåêòóðû. Òàêæå îïèñàí ïðîöåññ çàãðóçêè Linux . Âñå ýòî ìîæåò áûòü ïîëåçíûì äëÿ òåõ, êòî òîëüêî íà÷èíàåò ñâîé ïóòü â ñòîðîíó âñòðàèâàåìûõ ñèñòåì.

 2007 ãîäó îêîëî 98% èç áîëåå ÷åì ìèëëèàðäà ìîáèëüíûõ òåëåôîíîâ, ïðîäàâàåìûõ åæåãîäíî, áûëè îñíàùåíû ïî êðàéíåé ìåðå îäíèì ïðîöåññîðîì ARM. Ïî ñîñòîÿíèþ íà 2009 íà ïðîöåññîðû ARM ïðèõîäèòñÿ äî 90% âñåõ âñòðîåííûõ 32-ðàçðÿäíûõ ïðîöåññîðîâ. ×òî åùå ðàç ãîâîðèò î àêòóàëüíîñòè è ïðàâèëüíîñòè èçó÷åíèÿ ýòîé àðõèòåêòóðû è âûáîðà òåìû ïðàêòè÷åñêîé ðàáîòû.


   

 
|