Skip to content

6. Linux Kernel & Driver Development

Junning Wu edited this page Apr 12, 2018 · 14 revisions

6. Linux Kernel & Driver Development

在学习NVDLA的UMD和KMD代码的时候,特别是在进行系统级调试的时候,发现对于Linux内核和驱动的相关知识相对欠缺,很多过程和原理都不熟悉,需要进行补充;本章节有对NVDLA代码的学习,也有对Linux内核和驱动开发本身的学习。

6.1 Linux kernel Related

6.1.1 Linux Startup Process

当系统首次启动或复位时,处理器会从默认位置处开始执行代码。在个人电脑(PC)中,该位置位于基本输入/输出系统(BIOS)中,该系统存储在主板上的闪存中。嵌入式系统中的中央处理单元(CPU)调用复位向量以在闪存/ ROM中的默认地址处启动程序。无论哪种情况,结果都是一样的。由于PC提供了很大的灵活性,因此BIOS必须确定哪些设备可以启动。

Linux Kernel Startup Process

当找到引导设备时,第一阶段引导加载程序被加载到RAM中并执行。该引导加载程序的长度小于512个字节(单个扇区),其任务是加载第二阶段引导加载程序。

当第二阶段引导加载程序在RAM中并且正在执行时,通常会显示启动画面,并将Linux和可选的初始RAM磁盘(临时根文件系统)加载到内存中。加载镜像时,第二阶段引导加载程序将控制权交给内核映像,并对内核进行解压缩和初始化。在此阶段,第二阶段引导加载程序检查系统硬件,枚举附加的硬件设备,安装根设备,然后加载必要的内核模块。完成后,将启动第一个用户空间程序(init),并执行高级系统初始化。

具体的细节,可以参考IBM的技术博客:Inside the Linux boot process

6.2 Driver Development Related

6.3 Virtual Prototype

6.3.1 VIRT FS

在VP的仿真中,需要Aarch64访问Ubuntu的文件系统,加载编译好的nvdla_runtime可执行文件,这就需要借助于VIRT FS功能。

  1. add QEMU command line:

-fsdev local,id=r,path=.,security_model=none -device virtio-9p-device,fsdev=r,mount_tag=r

  1. run following command on the guest

mount -t 9p -o trans=virtio r /mnt

Clone this wiki locally