You are searching about Discuss The Three Primary Features Of An Object-Oriented Programming Language, today we will share with you article about Discuss The Three Primary Features Of An Object-Oriented Programming Language was compiled and edited by our team from many sources on the internet. Hope this article on the topic Discuss The Three Primary Features Of An Object-Oriented Programming Language is useful to you.
Page Contents
ARM Linux Booting Process
Questa serà una seria d’articuli chì spiegheranu cumu u kernel Linux si mette in l’architettura ARM. Questu hè a prima parte.
ARM Linux Boot Process:
Spiegheremu u prucessu di boot di AT91RM9200 system-on-chip, custruitu intornu à u processore ARM920T ARM Thumb. Kwickbyte crea una scheda integrata chjamata kb9202 basatu annantu à AT91RM9200. Piglieremu stu tavulinu cum’è un esempiu è vede cumu Linux boots up on this board.
Prima di principià à leghje questu avete bisognu di leghje a scheda di dati AT91RM9200 (specificazione).
Avete ancu bisognu di leghje ARM Architecture Reference Manual per capisce megliu u prucessu di boot.
Componenti in u prucessu di boot Linux:
U prucessu di boot di Linux implica i seguenti cumpunenti.
Bootloader
Image Kernel
Root Filesystem
Prima di vede cumu funziona i cumpunenti sopra, u seguitu hè u flussu di chjama di u prucessu di boot di Linux Kernel per l’architettura di u bracciu. Questu dà una grande stampa nantu à tuttu u prucessu di boot di Linux. Avemu aduprà u bootloader U-boot.
ARM Linux Boot Process: Big Picture
U-boot:
_start (cpu/arm920t/start.S)
start_code (cpu/arm920t/start.S)
start_armboot (lib_arm/board.c)
board_init (board/kb9202/kb9202.c)
timer_init (cpu/arm920t/at91/timer.c)
serial_init (drivers/serial/at91rm9200_usart.c)
main_loop (lib_arm/board.c)
Avà u-boot hè in funzione è hè in u prompt u-boot è prontu à accettà i cumandamenti. Assumimu chì l’immagine di u kernel hè caricata in RAM è emessu u cumandimu bootm.
do_bootm (common/cmd_bootm.c)
bootm_start (common/cmd_bootm.c)
bootm_load_os (common/cmd_bootm.c)
do_bootm_linux (lib_arm/bootm.c)
stext (linux/arch/arm/kernel/head.S)
U cuntrollu hè datu à Linux.
Kernel Linux:
stext (arcu / bracciu / kernel / testa.S:78)
__lookup_processor_type (arch/arm/kernel/head-common.S:160)
__lookup_machine_type (arch/arm/kernel/head-common.S:211)
__create_page_tables (arch/arm/kernel/head.S:219)
__arm920_setup (arch/arm/mm/proc-arm920.S:389)
__enable_mmu (arch/arm/kernel/head.S:160)
__turn_mmu_on (arch/arm/kernel/head.S:205)
__switch_data (arch/arm/kernel/head-common.S:20)
start_kernel (init/main.c:529)
start_kernel (init/main.c:529)
tick_init(kernel/time/tick-common.c:413)
setup_arch (arch/arm/kernel/setup.c:666)
setup_machine (arch/arm/kernel/setup.c:369)
lookup_machine_type ( )
setup_command_line (init/main.c:408)
build_all_zonelists (mm/page_alloc.c:3031)
parse_args (kernel/params.c:129)
mm_init (init/main.c:516)
mem_init (arch/arm/mm/init.c:528)
kmem_cache_init (mm/slab.c, mm/slob.c, mm/slub.c)
sched_init (kernel/sched.c)
init_IRQ (arch/arm/kernel/irq.c)
init_timers (kernel/timer.c:1713)
hrtimers_init (kernel/hrtimer.c:1741)
softirq_init (kernel/softirq.c:674)
console_init (drivers/char/tty_io.c:3084)
vfs_caches_init (fs/dcache.c:2352)
mnt_init (fs/namespace.c:2308)
init_rootfs ()
init_mount_tree (fs/namespace.c:2285)
do_kern_mount (fs/namespace.c:1053)
set_fs_pwd(fs/fs_struct.c:29)
set_fs_root(fs/fs_struct.c:12)
bdev_cache_init (fs/block_dev.c:465)
chrdev_init (fs/char_dev.c:566)
signals_init (kernel/signal.c:2737)
rest_init (init/main.c:425)
kernel_thread (431, arch/arm/kernel/process.c:388)
kernel_thread () crea un filu di kernel è u cuntrollu hè datu à kernel_init ().
kernel_init (431, init/main.c:856)
do_basic_setup (888, init/main.c:787)
init_workqueues (789, kernel/workqueue.c:1204)
driver_init (793, drivers/base/init.c:20)
do_initcalls (796, init/main.c:769) /* Chjama tutti i sottosistemi init funzioni */
prepare_namespace (906, init/do_mounts.c:366)
initrd_load (399, init/do_mounts_initrd.c:107)
rd_load_image (117, init/do_mounts_rd.c:158) /* se initrd hè datu */
identificà_ramdisk_image (179, init/do_mounts_rd.c:53)
handle_initrd (119, init/do_mounts_initrd.c:37) /*se rd_load_image hè successu */
mount_block_root (45, init/do_mounts.c:233)
do_mount_root (247, init/do_mounts.:218)
mount_root (417, init/do_mounts.c:334) /* se initrd ùn hè micca datu */
mount_block_root (359, init/do_mounts.c:233)
do_mount_root (247, init/do_mounts.c:218)
init_post (915, init/main.c:816)
run_init_process (847, init/main.c:807)
kernel_execve (810, arch/arm/kernel/sys_arm.c:81)
Spaziu d’utilizatori
init() /*userspace /sbin/init */
Bootloader:
Un bootloader hè un picculu prugramma chì caricarà l’imaghjini di u kernel in RAM è avvia l’imaghjini di u kernel. Questu hè ancu chjamatu bootstrap, postu chì porta (tira) u sistema caricando un sistema operatore. Bootloader principia prima chì qualsiasi altru software principia è inizializza u processore è rende a CPU pronta per eseguisce un prugramma cum’è un sistema operatore. A maiò parte di i prucessori anu un indirizzu predeterminatu da quale i primi byte di codice sò ottinuti quandu u putere hè appiicatu o a scheda hè resettata. I diseggiani di hardware utilizanu sta informazione per almacenà u codice di bootloader à quellu indirizzu in ROM o flash. Siccomu duverebbe inizializà a CPU è duverebbe eseguisce un prugramma chì si trova in l’architettura, i bootloaders di l’indirizzu specifichi sò assai specifichi di processore è di bordu. Ogni bordu incrustatu vene cun un bootstrap per scaricà l’imaghjini di u kernel o l’applicazione standalone in u bordu è cumincià à eseguisce l’imaghjini di u kernel o l’applicazione. Bootloader serà eseguitu quandu u putere hè appiicatu à una scheda di processore. In fondu, avarà alcune funzioni minime per carricà l’imaghjini è avvià.
Hè ancu pussibule cuntrullà u sistema utilizendu una interfaccia di debug hardware cum’è JTAG. Questa interfaccia pò esse aduprata per scrive u prugramma di boot loader in una memoria non volatile bootable (per esempiu, flash) urdinendu à u core di u processatore per fà l’azzioni necessarii per programà a memoria non volatile. In generale hè fattu per a prima volta per scaricà u bootloader di basa è per qualchì prucessu di ricuperazione. JTAG hè una interfaccia standard è populari furnita da parechji venditori di bordu. Certi microcontrollers furniscenu interfacce hardware speciale chì ùn ponu micca esse aduprate per piglià un cuntrollu arbitrariu di un sistema o direttamente eseguite codice, ma invece permettenu l’inserimentu di u codice di boot in memoria non volatile bootable (cum’è memoria flash) via protokolli simplici. Allora in a fase di fabricazione, tali interfacce sò aduprate per inject code boot (è possibbilmente altru codice) in memoria non volatile. Dopu à u reset di u sistema, u microcontrollore cumencia à eseguisce codice programatu in a so memoria non volatile, cum’è i prucessori di solitu utilizanu ROM per l’avvio. In parechji casi, tali interfacce sò implementate da una logica cablata. In altri casi, tali interfacce puderanu esse create da u software chì funziona in una ROM di boot integrata in chip da i pin GPIO.
Ci sò altri bootloaders di terze parti dispunibuli chì furnisce un riccu set di funzioni è una interfaccia d’utilizatore faciule. Pudete scaricà sti bootloaders di terzu partitu in bordu è ponu fà li bootloaders predeterminati per u vostru bordu. In generale, i bootloaders furniti da i venditori di bordu sò rimpiazzati cù questi bootloader di terzu. Ci hè un pocu di boolader di terzu dispunibule è alcuni sò open source (o bootloaders gratuiti) è alcuni sò cummirciali. Alcune di elli sò Das U-Boot, Red boot, GRUB (per desktop), LILO, Loadlin,, bootsect-loader, SYSLINUX, EtherBoot, ELILO.
Piglieremu u boot loader U-boot cum’è u nostru boot loader. U-boot hè u boot loader largamente utilizatu in i sistemi integrati. Spiegheremu u codice da a fonte u-boot-2010.03. Pudete scaricà U-boot da u situ seguente. http://www.denx.de/wiki/U-Boot
Cumu hè custruitu U-boot:
Basatu nantu à a cunfigurazione di U-boot, tutti i schedarii di l’assemblea (.S) è i schedarii C (.c) sò compilati cù un compilatore cross chì hè custruitu per una architettura particulari è i schedarii d’ughjettu (.o) seranu generati. Tutti issi schedarii di l’ughjettu sò ligati da u linker è un schedariu eseguibile serà creatu. Un schedariu d’ughjettu o un schedariu eseguibile hè una cullizzioni di rùbbriche cum’è.text,.data,.bss etc. I fugliali d’ughjettu è i fugliali eseguibili anu un furmatu di schedariu cum’è elf. Tutte e sezzioni di i schedarii di l’ughjettu seranu disposti in u schedariu eseguibile basatu annantu à un script chjamatu linker script. Stu script dice induve tutte e rùbbriche sò da esse caricate in a memoria quandu corre. Capisce stu script hè assai impurtante per sapè cumu u boot loader è u kernel sò cumposti è cumu e diverse sezioni di boot loader o kernel sò caricate in a memoria.
In generale, quandu un prugramma hè eseguitu (eseguitu) un caricatore leghje u schedariu eseguibile è carica diverse sezioni di u schedariu eseguibile in u locu di memoria specificata è cumencia à eseguisce a funzione di partenza (puntu di entrata) specificata in u script di linker. Ma, se vulete eseguisce (caricà) un caricatore di boot, ùn ci sarà micca un caricatore per carica (in fondu per capisce u furmatu di u schedariu) diverse sezioni di u schedariu eseguibile in memoria. Allora avete bisognu di utilizà un strumentu chjamatu objcopy chì pigliarà tutte e rùbbriche da u schedariu eseguibile è creà un schedariu binariu chì ùn hà micca formatu di schedariu. Stu schedariu binariu pò esse caricatu in a memoria è eseguitu o pò esse scrittu in a ROM à un indirizzu particulari (specificu à l’architettura) chì serà eseguitu da CPU quandu u putere hè appiicatu à u bordu.
Assumimu chì basatu nantu à a cunfigurazione U-boot tutti i schedari sò compilati è i schedari d’ughjettu sò creati. U-boot makefile usa u seguente script linker (specificu à l’architettura) per custruisce un schedariu eseguibile.
File: cpu/arm920t/u-boot.lds
32 OUTPUT_FORMAT(“elf32-littlearm”, “elf32-littlearm”, “elf32-littlearm”)
33 OUTPUT_ARCH (bracciu)
34 ENTRATA(_iniziu)
35 SECTION
36
37. = 0x00000000;
38
39. = ALIGN (4);
40.text:
41
42 cpu/arm920t/start.o (.text)
43 *(.text)
44
4546. = ALIGN (4);
47.rodata: *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
48
49. = ALIGN (4);
50.data: *(.data)
51
52. = ALIGN (4);
53.got: *(.got)
54
55. =.;
56 __u_boot_cmd_start =.;
57.u_boot_cmd: *(.u_boot_cmd)
58 __u_boot_cmd_end =.;
59
60. = ALIGN (4);
61 __bss_start =.;
62.bss (NLOAD): *(.bss). = ALIGN (4);
63 _fini =.;
64
OUTPUT_FORMAT in a linea #32 specifica u furmatu di u schedariu eseguibile. Quì u furmatu di u schedariu eseguibile hè elf32 è endianness hè little endian. OUTPUT_ARCH in a linea # 33 specifica l’architettura nantu à quale u codice corre. ENTRY in a linea #34 specifica a funzione di partenza (puntu di entrata) di u prugramma u-boot. Quì u puntu di entrata hè _start.
SECTIONS in a linea #35 definisce cumu e diverse sezioni sò mappate in u schedariu eseguibile. Loader usa l’indirizzi specificati in questa sezione per carricà diverse sezioni di u prugramma in a memoria.
‘.’ in a linea #37 specifica l’indirizzu di partenza induve e seguenti rùbbriche deve esse caricate. In questu casu, l’indirizzu iniziale hè 0x00000000. Dopu questu in a linea #39, a memoria hè allinata da 4 bytes è a sezione.text seguita in a linea #40.
40.text:
41
42 cpu/arm920t/start.o (.text)
43 *(.text)
44
À u ‘.’ pusizioni (0x00000000) u codice in u cpu/arm920t/start.o hè mappatu è seguita u codice chì ci hè in.text rùbbriche di tutti l ‘àutri uggettu (.o) i schedari. cpu/arm920t/start.o cuntene a funzione _start() (in lingua assemblea) chì hè u puntu di entrata di stu prugramma.
Avà u ‘.’ serà à 0x00000000 + sizeof (.text). Una volta a memoria hè allinata da 4 bytes è a sezione.rodata seguita in a linea #47.
. = ALIGN (4);
47.rodata: *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
.rodata rùbbriche da tutti i schedari uggetti sò mapping à stu indirizzu. Segui i sezzioni.data è.git.
49. = ALIGN (4);
50.data: *(.data)
51
52. = ALIGN (4);
53.got: *(.got)
Ogni cumandamentu U-boot hè un ughjettu di tipu ‘cmd_tbl_t’ chì cuntene u nome di u cumandamentu, a stringa di l’aiutu è l’indicatore di funzione per esse eseguitu quandu questu cumanda hè esecutatu. Tutti questi ughjetti di cumanda sò posti in a memoria sequentially. Ognunu di questu ughjettu di cumanda hè custruitu in una sezione definita U-boot chjamata.u_boot_cmd in u schedariu d’ughjettu. Questi all.u_boot_cmd rùbbriche sò posti in a memoria dopu à e rùbbriche sopra (.data è.git).
. =.;
56 __u_boot_cmd_start =.;
57.u_boot_cmd: *(.u_boot_cmd)
58 __u_boot_cmd_end =.;
__u_boot_cmd_start cuntene l’iniziu di l’uggetti di cumandamenti è __u_boot_cmd_end cuntene a fine di l’uggetti di cumandamenti.
E dopu seguita i rùbbriche.bss (variabili globali uninitialized).
60. = ALIGN (4);
61 __bss_start =.;
62.bss (NLOAD): *(.bss). = ALIGN (4);
63 _fini =.;
__bss_start indica l’indirizzu iniziale.bss è _end cuntene a fine di tutte e sezioni.
Utilizà stu linker script linker generà un schedariu eseguibile chjamatu u-boot. U strumentu Objcopy hè utilizatu per generà un schedariu binariu da u schedariu eseguibile u-boot.
u-boot.bin: u-boot
$(OBJCOPY) $OBJCFLAGS -O binariu $
Video about Discuss The Three Primary Features Of An Object-Oriented Programming Language
You can see more content about Discuss The Three Primary Features Of An Object-Oriented Programming Language on our youtube channel: Click Here
Question about Discuss The Three Primary Features Of An Object-Oriented Programming Language
If you have any questions about Discuss The Three Primary Features Of An Object-Oriented Programming Language, please let us know, all your questions or suggestions will help us improve in the following articles!
The article Discuss The Three Primary Features Of An Object-Oriented Programming Language was compiled by me and my team from many sources. If you find the article Discuss The Three Primary Features Of An Object-Oriented Programming Language helpful to you, please support the team Like or Share!
Rate Articles Discuss The Three Primary Features Of An Object-Oriented Programming Language
Rate: 4-5 stars
Ratings: 7066
Views: 93529143
Search keywords Discuss The Three Primary Features Of An Object-Oriented Programming Language
Discuss The Three Primary Features Of An Object-Oriented Programming Language
way Discuss The Three Primary Features Of An Object-Oriented Programming Language
tutorial Discuss The Three Primary Features Of An Object-Oriented Programming Language
Discuss The Three Primary Features Of An Object-Oriented Programming Language free
#ARM #Linux #Booting #Process
Source: https://ezinearticles.com/?ARM-Linux-Booting-Process&id=4774950