[[!meta copyright="Copyright © 2007, 2008, 2011, 2013 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] `if NCPUS > 1` stuff is not being considered so far. > i386/i386at/boothdr.S: \_start > i386/i386at/boothdr.S: boot\_entry >> i386/i386at/model\_dep.c: c\_boot\_entry >>> i386/i386at/boothdr.S: discover\_x86\_cpu\_type >>> i386/i386at/model\_dep.c: i386at\_init >>>> i386/i386/pic.c: picinit >>>> i386/i386at/model\_dep.c: mem\_size\_init >>>> i386/intel/pmap.c: pmap\_bootstrap >>>> i386/i386/gdt.c: gdt\_init >>>> i386/i386/idt.c: idt\_init >>>> i386/i386at/int\_init.c: int\_init >>>> i386/i386/ldt.c: ldt\_init >>>> i386/i386/ktss.c: ktss\_init >>> kern/startup.c: setup\_main >>>> kern/debug.c: panic\_init >>>> kern/printf.c: printf\_init >>>> kern/sched\_prim.c: sched\_init >>>>> kern/sched\_prim.c: wait\_queue\_init >>>>> kern/processor.c: pset\_sys\_bootstrap >>>>> kern/ast.c: ast\_init >>>> vm/vm\_init.c: vm\_mem\_bootstrap >>>>> vm/vm\_resident.c: vm\_page\_bootstrap >>>>>> vm/vm\_resident.c: pmap\_startup >>>>> kern/zalloc.c: zone\_bootstrap >>>>> vm/vm\_object.c: vm\_object\_bootstrap >>>>>> vm/vm\_external.c: vm\_external\_module\_initialize >>>>> vm/vm\_map.c: vm\_map\_init >>>>> vm/vm\_kern.c: kmem\_init >>>>> i386/intel/pmap.c: pmap\_init >>>>> kern/zalloc.c: zone\_init >>>>> kern/kalloc.c: kalloc\_init >>>>> vm/vm\_fault.c: vm\_fault\_init >>>>> vm/vm\_resident.c: vm\_page\_module\_init >>>>> vm/memory\_object.c: memory\_manager\_default\_init >>>> ipc/ipc\_init.c: ipc\_bootstrap >>>>> ipc/ipc\_table.c: ipc\_table\_init >>>>> ipc/ipc\_notify.c: ipc\_notify\_init >>>>> ipc/ipc\_hash.c: ipc\_hash\_init >>>>> ipc/ipc\_marequest.c: ipc\_marequest\_init >>>> vm/vm\_init.c: vm\_mem\_init >>>>> vm/vm\_object.c: vm\_object\_init >>>> ipc/ipc\_init.c: ipc\_init >>>>> kern/ipc\_host.c: ipc\_host\_init >>>>>> kern/ipc\_host.c: ipc\_pset\_init >>>>>> kern/ipc\_host.c: ipc\_pset\_enable >>>>>> kern/ipc\_host.c: ipc\_processor\_init >>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL >>>> kern/timer.c: init\_timers >>>> kern/mach\_clock.c: init\_timeout >>>> kern/xpr.c: xprbootstrap >>>> kern/time\_stamp.c: timestamp\_init >>>> kern/mach\_clock.c: [[mapable\_time\_init|interface/device/time]] >>>> i386/i386at/model\_dep.c: machine\_init >>>>> device/cons.c: cninit >>>>> i386/i386/fpu.c: init\_fpu >>>>> linux/dev/init/main.c: linux\_init >>>>>> linux/dev/arch/i386/kernel/irq.c: init\_IRQ >>>>>>> linux/dev/arch/i386/kernel/irq.c: reserve\_mach\_irqs >>>>>> linux/dev/kernel/sched.c: linux\_sched\_init >>>>>> linux/dev/init/main.c: calibrate\_delay >>>>>> linux/dev/glue/kmem.c: linux\_kmem\_init >>>>>> linux/src/drivers/pci/pci.c: pci\_init >>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_init >>>>>>> linux/src/drivers/pci/pci.c: scan\_bus >>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_fixup >>>>>> linux/dev/glue/net.c: linux\_net\_emulation\_init >>>>>> linux/dev/drivers/block/genhd.c: device\_setup >>>>>>> linux/dev/glue/block.c: blk\_dev\_init >>>>>>>> linux/src/drivers/block/ide.c: ide\_init >>>>>>>> linux/dev/drivers/block/floppy.c: floppy\_init >>>>>>> linux/src/drivers/scsi/scsi.c: scsi\_dev\_init >>>>>>> linux/dev/net/core/dev.c: net\_dev\_init >>>>>> linux/pcmcia-cs/glue/pcmcia.c: pcmcia\_init >>>>> i386/i386at/autoconf.c: probeio >>>>> i386/i386at/model\_dep.c: inittodr >>>>> i386/intel/pmap.c: pmap\_unmap\_page\_zero >>>> kern/task.c: task\_init >>>>> kern/syscall\_emulation.c: eml\_init >>>> kern/thread.c: thread\_init >>>>> i386/i386/pcb.c: pcb\_module\_init >>>>>> i386/i386/fpu.c: fpu\_module\_init >>>>>> i386/i386/iopb.c: iopb\_init >>>> kern/thread\_swap.c: swapper\_init >>>> kern/sched\_prim.c: recompute\_priorities >>>> kern/mach\_factor.c: compute\_mach\_factor >>>> kern/startup.c: start\_kernel\_threads [...] >>>> kern/startup.c: cpu\_launch\_first\_thread >>>>> i386/i386at/model\_dep.c: startrtclock >>>>>> i386/i386/pit.c: clkstart >>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL >>>>> i386/i386/pcb.c: load\_context [...] > kern/startup.c: start\_kernel\_threads > Threads get created. >> kern/sched\_prim.c: idle\_thread >> One for each CPU. >> kern/thread.c: reaper\_thread >> kern/thread\_swap.c: swapin\_thread >> kern/sched\_prim.c: sched\_thread >> [...] >> kern/bootstrap.c: bootstrap\_create >>> The [[grub/multiboot]] modules have been put somewhere into memory by >>> [[GRUB]]. The boot scripts are parsed. The modules' ELF image's `PT_LOAD` >>> sections are \`\`read'' (that is, `vm_allocate` and `copyout`) and turned >>> into real [[task]]s. The multiboot modules' memory regions can be >>> deallocated then. >> [...] >> vm\_pageout >> Does not return. # IRC, freenode, #hurd, 2013-10-07 look, where should i dig or where from should i start from, if i have desire to know how the kernel was written from baremetal? Can it be ever done nowadays? cureOS: the boot entry of the kernel is i386/i386at/boothdr.S , boot_entry that's what grub jumps to then that jumps to c_boot_entry and everything else is C grub loads it somehow. how does it prepare cpu and memoty, cpu cache control if any... segments for stack.. see the grub documentation basically it's all flat linear space does kernel transform it after that? see the ldt/gdt initialization from i386at_init and children nothing much fancy, a kernel cs/ds, and user cs/ds and paging, naturally sure