SlideShare a Scribd company logo
Part	
  1	
  :	
  Code	
  Reading	
  
of	
  

F9	
  Microkernel	
  
ben6	
  
2013-­‐10-­‐16	
  
F9	
  

Agenda	
  

•  Overview	
  of	
  F9-­‐Microkernel	
  	
  
•  Code	
  reading	
  (cscope,	
  ctags)	
  
•  Code	
  trace	
  
F9	
  

Agenda	
  

•  Overview	
  of	
  F9-­‐Microkernel	
  	
  
•  Code	
  reading	
  (cscope,	
  ctags)	
  
•  Code	
  trace	
  
F9	
  Microkernel	
  Overview	
  
•  an	
  experimental	
  microkernel	
  used	
  to	
  construct	
  
flexible	
  embedded	
  systems	
  inspired	
  by	
  famous	
  L4	
  
microkernel.	
  	
  
•  The	
  moMvaMon	
  of	
  F9	
  microkernel	
  is	
  to	
  deploy	
  
modern	
  kernel	
  techniques	
  to	
  support	
  	
  
–  running	
  real-­‐Mme	
  and	
  Mme-­‐sharing	
  applicaMons	
  (ex:	
  	
  
wireless	
  communicaMons)	
  for	
  ARM	
  Cortex-­‐M	
  series	
  
microprocessors	
  with	
  efficiency	
  (performance	
  +	
  
power	
  consumpMon)	
  	
  
–  security	
  (memory	
  protecMon	
  +	
  isolated	
  execuMon)	
  
CharacterisMcs	
  
•  F9	
  follows	
  the	
  fundamental	
  principles	
  of	
  microkernels	
  
in	
  that	
  it	
  implements	
  address	
  spaces,	
  thread	
  
management,	
  and	
  IPC	
  only	
  in	
  the	
  privileged	
  kernel.	
  
•  Designed	
  and	
  	
  customized	
  for	
  ARM	
  Cortex-­‐M,	
  
supporMng	
  NVIC	
  (Nested	
  Vectored	
  Interrupt	
  
Controller),	
  Bit	
  Banding,	
  MPU	
  (Memory	
  ProtecMon	
  
Unit)	
  
•  Energy	
  efficient	
  scheduling	
  and	
  Mckless	
  Mmer	
  
•  KProbes	
  
•  Independent	
  TCB	
  (Thread	
  Control	
  Block)	
  for	
  each	
  
thread	
  with	
  its	
  global	
  ID	
  
CharacterisMcs	
  (Cont.)	
  
•  Memory	
  management	
  
–  Memory	
  pool,	
  Flexible	
  page,	
  Address	
  space	
  

•  System	
  calls:	
  	
  
–  Grant,	
  Map,	
  Flush	
  

•  UTCB	
  concept	
  
–  	
  a	
  small	
  thread-­‐specific	
  region	
  in	
  the	
  thread's	
  virtual	
  
address	
  space,	
  which	
  is	
  always	
  mapped	
  

•  Synchronous	
  IPC	
  
•  Debugging	
  and	
  profiling	
  mechanisms	
  
F9	
  

Agenda	
  

•  Overview	
  of	
  F9-­‐Microkernel	
  	
  
•  Code	
  reading	
  (cscope,	
  ctags)	
  
•  Code	
  trace	
  
Kernel	
  Line	
  of	
  code	
  

Kernel	
  C	
  code	
  line:	
  2661	
  
Git	
  head:	
  7ae6e15bdf4d67740ef9fa2a0c6a2a194df9553b	
  
cscope	
  
•  CTRL-­‐D	
  to	
  quit	
  
•  Use	
  arrow	
  key	
  
<up>,	
  <down>	
  to	
  
select	
  
•  Type	
  symbol	
  name	
  
your	
  want	
  to	
  
search	
  
Use	
  case	
  of	
  cscope	
  
1. 

2. 
3. 
4. 

5. 

Get	
  f9-­‐kernel	
  source	
  code	
  

	
  
git	
  clone	
  h=ps://github.com/f9micro/f9-­‐kernel	
  

Generate	
  cscope.files	
  to	
  be	
  scanned	
  

–  cd	
  f9-­‐kernel;	
  find	
  .	
  -­‐name	
  "*.c"	
  -­‐o	
  	
  -­‐name	
  "*.h"	
  >	
  cscope.files	
  

Generate	
  Cscope	
  database	
  

cscope	
  -­‐b	
  -­‐q	
  -­‐k	
  

Using	
  the	
  database	
  

–  default	
  Cscope	
  browser	
  
cscope	
  -­‐d	
  
(be	
  able	
  to	
  use	
  vim	
  or	
  other	
  editor	
  support	
  cscope	
  database)	
  

RegeneraHng	
  database	
  when	
  source	
  code	
  changes	
  

– 

Use	
  same	
  command	
  step	
  4.	
  

Reference:	
  hhp://cscope.sourceforge.net/large_projects.html	
  
vim	
  +	
  ctags	
  
•  sudo	
  apt-­‐get	
  install	
  ctags	
  
•  Generate	
  tags	
  
	
  
ctags	
  –R	
  *	
  

•  key	
  definiMon	
  at	
  vim	
  
	
  

CTRL	
  

+	
  ]	
  è	
  goto	
  the	
  funcMon	
  definiMon	
  

CTRL	
  

+	
  t	
  	
  è	
  back	
  to	
  previous	
  funcMon	
  call	
  
PART	
  1	
  

F9	
  KERNEL	
  ENTRY	
  
F9-­‐kernel	
  Entry	
  
•  plamorm/f9.ld	
  	
  	
  	
  	
  è	
  F9	
  ldscript	
  

__l4_start	
  
F9-­‐kernel	
  Entry	
  
•  plamorm/f9.ld	
  

Header	
  of	
  f9.bin	
  is	
  
isr_vector	
  table	
  for	
  
Cortex-­‐M	
  MCU	
  
f9-­‐kernel:	
  __l4_start	
  
kernel/init.c	
  
•  Be	
  reset	
  
handler	
  
•  F9	
  startup	
  
entry	
  
__l4_start	
  
•  IniMal	
  hooks	
  
•  Copy	
  data	
  
segment	
  for	
  1st	
  
iniMalizaMon	
  
•  Clear	
  segments	
  
•  IniMalize	
  system	
  
clock	
  
•  Call	
  main()	
  entry	
  
start.c	
  :	
  main.c	
  
•  IniMal	
  for	
  level	
  plamorm	
  
hooks	
  
•  Irq	
  iniMal	
  and	
  disable	
  
interrupt	
  
•  Setup	
  FloaMng	
  Point	
  Unit	
  
•  Show	
  banner	
  
•  IniMal	
  for	
  Level	
  kernel	
  
hooks	
  
•  Create	
  and	
  idle	
  and	
  root	
  
thread	
  
•  Create	
  Mmer	
  64	
  Mcks	
  for	
  
delivering	
  ipc	
  
•  Init	
  LAST	
  stage	
  hooks	
  
•  Switch	
  to	
  iniMal	
  kernel	
  
thread	
  
Enable/disable	
  irq	
  
inline	
  	
  assembly	
  
Syntax:	
  

	
  

__asm__	
  __volaMle__("InstrucMon	
  List");

•  __volaMle__	
  	
  
	
  Tell	
  gcc	
  don’t	
  change	
  my	
  intrusMon	
  list	
  

•  cpsid,	
  cpsie	
  
reference:	
  
Implemented	
  interrupt	
  enabling	
  delay	
  in	
  
the	
  Cortex-­‐M3	
  and	
  Cortex-­‐M4	
  processors	
  
kMmer_event_create	
  
•  kMmer.c	
  
•  Create	
  new	
  event	
  
entry	
  	
  
•  add	
  to	
  linked	
  list	
  of	
  
event	
  table	
  
•  Add	
  entry	
  for	
  event	
  
scheduling	
  
Switch	
  to	
  kernel	
  

•  Create	
  kernel	
  thread	
  and	
  enable	
  running	
  
by	
  context	
  switch	
  
F9	
  

Agenda	
  

•  Overview	
  of	
  F9-­‐Microkernel	
  	
  
•  Code	
  reading	
  (cscope,	
  ctags)	
  
•  Code	
  trace	
  
Console	
  setup	
  before	
  code	
  trace	
  
Pl2303	
  console	
  with	
  STM32F4	
  
•  USB2TTL	
  RX	
  (white)	
  -­‐-­‐-­‐>	
  PA0	
  
•  USB2TTL	
  TX	
  (green)	
  -­‐-­‐-­‐>	
  PA1	
  

USB-­‐Serial	
  Controller	
  
Prolific	
  2303	
  
Toolchain	
  for	
  Cortex-­‐M4	
  
•  Sourcery	
  CodeBench	
  
–  ARM	
  Processors:	
  EABI	
  Release	
  
–  Verified	
  versions:	
  arm-­‐2012.03,	
  arm-­‐2013.05	
  
	
  

•  GNU	
  Tools	
  for	
  ARM	
  Embedded	
  Processors	
  
stlink	
  
Project	
  for	
  tools	
  we	
  used:	
  st-­‐
flash,	
  st-­‐uMl	
  
hhps://github.com/texane/stlink	
  
Code	
  trace:	
  st-­‐uMl	
  

Remote	
  debug	
  port	
  for	
  gdb	
  
Code	
  trace:	
  gdb	
  remote	
  
target	
  remote	
  :4242	
  
Code	
  trace	
  issue	
  
•  Debug	
  Panic	
   Git	
  HEAD:	
  7ae6e15bdf4d67740ef9fa2a0c6a2a194df9553b	
  
Discussions	
  

F9	
  

?	
  
References	
  
•  F9	
  Microkernel	
  source	
  code	
  and	
  introducMon	
  
	
  
•  Using	
  Cscope	
  on	
  large	
  projects	
  (example:	
  the	
  Linux	
  kernel)	
  
•  Ctags	
  wiki	
  
•  __asm__	
  __volaMle__	
  GCC的内嵌汇编语法	
  AT&T汇编语⾔言语法(⼀一)	
  
•  Implemented	
  interrupt	
  enabling	
  delay	
  in	
  the	
  Cortex-­‐M3	
  and	
  Cortex-­‐M4	
  
processors	
  
	
  
•  texane's	
  stlink	
  project	
  at	
  github	
  

More Related Content

PDF
F9 microkernel app development part 1
PDF
Translation Cache Policies for Dynamic Binary Translation
PDF
Linux Kernel Platform Development: Challenges and Insights
PPTX
QEMU and Raspberry Pi. Instant Embedded Development
PDF
ARM Architecture and Meltdown/Spectre
PPTX
Embedded TCP/IP stack for FreeRTOS
PDF
Using SoC Vendor HALs in the Zephyr Project - SFO17-112
PDF
Linux on ARM 64-bit Architecture
F9 microkernel app development part 1
Translation Cache Policies for Dynamic Binary Translation
Linux Kernel Platform Development: Challenges and Insights
QEMU and Raspberry Pi. Instant Embedded Development
ARM Architecture and Meltdown/Spectre
Embedded TCP/IP stack for FreeRTOS
Using SoC Vendor HALs in the Zephyr Project - SFO17-112
Linux on ARM 64-bit Architecture

What's hot (20)

PPTX
Linux Initialization Process (2)
PPTX
Linux Kernel Booting Process (1) - For NLKB
PDF
Building Network Functions with eBPF & BCC
PDF
Linux SMEP bypass techniques
PDF
New Zephyr features: LWM2M / FOTA Framework - SFO17-113
PDF
LCU14 302- How to port OP-TEE to another platform
PPTX
U-boot and Android Verified Boot 2.0
PDF
Nodes and Networks for HPC computing
PDF
BSD Sockets API in Zephyr RTOS - SFO17-108
PDF
Emerging Persistent Memory Hardware and ZUFS - PM-based File Systems in User ...
PPTX
Linux Device Tree
PPT
Concurrency bug identification through kernel panic log (english)
PPTX
U-Boot presentation 2013
PDF
HKG15-311: OP-TEE for Beginners and Porting Review
PPT
Embedding Linux On The Encore Simputer
PPTX
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
PPT
ARM Linux Embedded memory protection techniques
PPTX
U-Boot Porting on New Hardware
PDF
Building
PPT
U boot porting guide for SoC
Linux Initialization Process (2)
Linux Kernel Booting Process (1) - For NLKB
Building Network Functions with eBPF & BCC
Linux SMEP bypass techniques
New Zephyr features: LWM2M / FOTA Framework - SFO17-113
LCU14 302- How to port OP-TEE to another platform
U-boot and Android Verified Boot 2.0
Nodes and Networks for HPC computing
BSD Sockets API in Zephyr RTOS - SFO17-108
Emerging Persistent Memory Hardware and ZUFS - PM-based File Systems in User ...
Linux Device Tree
Concurrency bug identification through kernel panic log (english)
U-Boot presentation 2013
HKG15-311: OP-TEE for Beginners and Porting Review
Embedding Linux On The Encore Simputer
First Steps Developing Embedded Applications using Heterogeneous Multi-core P...
ARM Linux Embedded memory protection techniques
U-Boot Porting on New Hardware
Building
U boot porting guide for SoC
Ad

Viewers also liked (7)

PDF
F9 Microkernel code reading part 2 scheduling
PDF
While software engineer meets 3d printer
PDF
F9 microkernel code reading part 4 memory management
PDF
Sf 160 kjs manual
PDF
Audi a6 adr
PPTX
F9 microkernel app development part 2 gpio meets led
PDF
Hype vs. Reality: The AI Explainer
F9 Microkernel code reading part 2 scheduling
While software engineer meets 3d printer
F9 microkernel code reading part 4 memory management
Sf 160 kjs manual
Audi a6 adr
F9 microkernel app development part 2 gpio meets led
Hype vs. Reality: The AI Explainer
Ad

Similar to F9 Microkernel code reading - part 1 (20)

PPTX
Lec 10-linux-review
PDF
LCA14: LCA14-412: GPGPU on ARM SoC session
PPT
Linux kernel modules
PPT
Introduction to Linux Kernel by Quontra Solutions
PDF
Linux Foundation Mentorship Sessions - Kernel Livepatch: An Introduction
PDF
Exploring the Programming Models for the LUMI Supercomputer
PDF
Porting_uClinux_CELF2008_Griffin
PPTX
eBPF Basics
PDF
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
PDF
Kernel bug hunting
PDF
netfilter programming
PDF
Dynamic Instrumentation- OpenEBS Golang Meetup July 2017
PDF
BKK16-103 OpenCSD - Open for Business!
PDF
Introduction To Linux Kernel Modules
PDF
”Bare-Metal Container" presented at HPCC2016
PDF
ARM IoT Firmware Emulation Workshop
PDF
Performance Optimization of SPH Algorithms for Multi/Many-Core Architectures
PDF
Linux BPF Superpowers
PDF
MattsonTutorialSC14.pdf
PDF
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
Lec 10-linux-review
LCA14: LCA14-412: GPGPU on ARM SoC session
Linux kernel modules
Introduction to Linux Kernel by Quontra Solutions
Linux Foundation Mentorship Sessions - Kernel Livepatch: An Introduction
Exploring the Programming Models for the LUMI Supercomputer
Porting_uClinux_CELF2008_Griffin
eBPF Basics
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
Kernel bug hunting
netfilter programming
Dynamic Instrumentation- OpenEBS Golang Meetup July 2017
BKK16-103 OpenCSD - Open for Business!
Introduction To Linux Kernel Modules
”Bare-Metal Container" presented at HPCC2016
ARM IoT Firmware Emulation Workshop
Performance Optimization of SPH Algorithms for Multi/Many-Core Architectures
Linux BPF Superpowers
MattsonTutorialSC14.pdf
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core

Recently uploaded (20)

PDF
Encapsulation theory and applications.pdf
PPTX
Cloud computing and distributed systems.
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
cuic standard and advanced reporting.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
KodekX | Application Modernization Development
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
sap open course for s4hana steps from ECC to s4
Encapsulation theory and applications.pdf
Cloud computing and distributed systems.
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Spectral efficient network and resource selection model in 5G networks
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Empathic Computing: Creating Shared Understanding
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
MYSQL Presentation for SQL database connectivity
cuic standard and advanced reporting.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
NewMind AI Weekly Chronicles - August'25 Week I
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectroscopy.pptx food analysis technology
KodekX | Application Modernization Development
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
MIND Revenue Release Quarter 2 2025 Press Release
sap open course for s4hana steps from ECC to s4

F9 Microkernel code reading - part 1

  • 1. Part  1  :  Code  Reading   of   F9  Microkernel   ben6   2013-­‐10-­‐16  
  • 2. F9   Agenda   •  Overview  of  F9-­‐Microkernel     •  Code  reading  (cscope,  ctags)   •  Code  trace  
  • 3. F9   Agenda   •  Overview  of  F9-­‐Microkernel     •  Code  reading  (cscope,  ctags)   •  Code  trace  
  • 4. F9  Microkernel  Overview   •  an  experimental  microkernel  used  to  construct   flexible  embedded  systems  inspired  by  famous  L4   microkernel.     •  The  moMvaMon  of  F9  microkernel  is  to  deploy   modern  kernel  techniques  to  support     –  running  real-­‐Mme  and  Mme-­‐sharing  applicaMons  (ex:     wireless  communicaMons)  for  ARM  Cortex-­‐M  series   microprocessors  with  efficiency  (performance  +   power  consumpMon)     –  security  (memory  protecMon  +  isolated  execuMon)  
  • 5. CharacterisMcs   •  F9  follows  the  fundamental  principles  of  microkernels   in  that  it  implements  address  spaces,  thread   management,  and  IPC  only  in  the  privileged  kernel.   •  Designed  and    customized  for  ARM  Cortex-­‐M,   supporMng  NVIC  (Nested  Vectored  Interrupt   Controller),  Bit  Banding,  MPU  (Memory  ProtecMon   Unit)   •  Energy  efficient  scheduling  and  Mckless  Mmer   •  KProbes   •  Independent  TCB  (Thread  Control  Block)  for  each   thread  with  its  global  ID  
  • 6. CharacterisMcs  (Cont.)   •  Memory  management   –  Memory  pool,  Flexible  page,  Address  space   •  System  calls:     –  Grant,  Map,  Flush   •  UTCB  concept   –   a  small  thread-­‐specific  region  in  the  thread's  virtual   address  space,  which  is  always  mapped   •  Synchronous  IPC   •  Debugging  and  profiling  mechanisms  
  • 7. F9   Agenda   •  Overview  of  F9-­‐Microkernel     •  Code  reading  (cscope,  ctags)   •  Code  trace  
  • 8. Kernel  Line  of  code   Kernel  C  code  line:  2661   Git  head:  7ae6e15bdf4d67740ef9fa2a0c6a2a194df9553b  
  • 9. cscope   •  CTRL-­‐D  to  quit   •  Use  arrow  key   <up>,  <down>  to   select   •  Type  symbol  name   your  want  to   search  
  • 10. Use  case  of  cscope   1.  2.  3.  4.  5.  Get  f9-­‐kernel  source  code     git  clone  h=ps://github.com/f9micro/f9-­‐kernel   Generate  cscope.files  to  be  scanned   –  cd  f9-­‐kernel;  find  .  -­‐name  "*.c"  -­‐o    -­‐name  "*.h"  >  cscope.files   Generate  Cscope  database   cscope  -­‐b  -­‐q  -­‐k   Using  the  database   –  default  Cscope  browser   cscope  -­‐d   (be  able  to  use  vim  or  other  editor  support  cscope  database)   RegeneraHng  database  when  source  code  changes   –  Use  same  command  step  4.   Reference:  hhp://cscope.sourceforge.net/large_projects.html  
  • 11. vim  +  ctags   •  sudo  apt-­‐get  install  ctags   •  Generate  tags     ctags  –R  *   •  key  definiMon  at  vim     CTRL   +  ]  è  goto  the  funcMon  definiMon   CTRL   +  t    è  back  to  previous  funcMon  call  
  • 12. PART  1   F9  KERNEL  ENTRY  
  • 13. F9-­‐kernel  Entry   •  plamorm/f9.ld          è  F9  ldscript   __l4_start  
  • 14. F9-­‐kernel  Entry   •  plamorm/f9.ld   Header  of  f9.bin  is   isr_vector  table  for   Cortex-­‐M  MCU  
  • 15. f9-­‐kernel:  __l4_start   kernel/init.c   •  Be  reset   handler   •  F9  startup   entry  
  • 16. __l4_start   •  IniMal  hooks   •  Copy  data   segment  for  1st   iniMalizaMon   •  Clear  segments   •  IniMalize  system   clock   •  Call  main()  entry  
  • 17. start.c  :  main.c   •  IniMal  for  level  plamorm   hooks   •  Irq  iniMal  and  disable   interrupt   •  Setup  FloaMng  Point  Unit   •  Show  banner   •  IniMal  for  Level  kernel   hooks   •  Create  and  idle  and  root   thread   •  Create  Mmer  64  Mcks  for   delivering  ipc   •  Init  LAST  stage  hooks   •  Switch  to  iniMal  kernel   thread  
  • 18. Enable/disable  irq   inline    assembly   Syntax:     __asm__  __volaMle__("InstrucMon  List"); •  __volaMle__      Tell  gcc  don’t  change  my  intrusMon  list   •  cpsid,  cpsie   reference:   Implemented  interrupt  enabling  delay  in   the  Cortex-­‐M3  and  Cortex-­‐M4  processors  
  • 19. kMmer_event_create   •  kMmer.c   •  Create  new  event   entry     •  add  to  linked  list  of   event  table   •  Add  entry  for  event   scheduling  
  • 20. Switch  to  kernel   •  Create  kernel  thread  and  enable  running   by  context  switch  
  • 21. F9   Agenda   •  Overview  of  F9-­‐Microkernel     •  Code  reading  (cscope,  ctags)   •  Code  trace  
  • 22. Console  setup  before  code  trace   Pl2303  console  with  STM32F4   •  USB2TTL  RX  (white)  -­‐-­‐-­‐>  PA0   •  USB2TTL  TX  (green)  -­‐-­‐-­‐>  PA1   USB-­‐Serial  Controller   Prolific  2303  
  • 23. Toolchain  for  Cortex-­‐M4   •  Sourcery  CodeBench   –  ARM  Processors:  EABI  Release   –  Verified  versions:  arm-­‐2012.03,  arm-­‐2013.05     •  GNU  Tools  for  ARM  Embedded  Processors  
  • 24. stlink   Project  for  tools  we  used:  st-­‐ flash,  st-­‐uMl   hhps://github.com/texane/stlink  
  • 25. Code  trace:  st-­‐uMl   Remote  debug  port  for  gdb  
  • 26. Code  trace:  gdb  remote   target  remote  :4242  
  • 27. Code  trace  issue   •  Debug  Panic   Git  HEAD:  7ae6e15bdf4d67740ef9fa2a0c6a2a194df9553b  
  • 29. References   •  F9  Microkernel  source  code  and  introducMon     •  Using  Cscope  on  large  projects  (example:  the  Linux  kernel)   •  Ctags  wiki   •  __asm__  __volaMle__  GCC的内嵌汇编语法  AT&T汇编语⾔言语法(⼀一)   •  Implemented  interrupt  enabling  delay  in  the  Cortex-­‐M3  and  Cortex-­‐M4   processors     •  texane's  stlink  project  at  github