DSP

《Linux设备驱动开发详解》读书笔记(1)

2019-07-13 18:39发布

最近读了一本书,《Linux设备驱动开发详解》,宋宝华写的,基于4.0内核。下面是读书笔记。 第一章,    环境搭建 主要讲Linux开发环境的搭建。VirtualBox+ Ubuntu + QEMU。 第二章,    硬件基础 主要将嵌入式Linux中的硬件基础,包括处理器(SoC,DSP)、存储器(ROM,NOR/NAND Flash, DRAM等)、串口、I2C、SPI、USB、以太网、PCI/PCI-E(256字节配置空间=>VendorID, Device ID,CMD,STATUS,BAR,扩展配置空间),SD/SDIO/eMMC(CMD/CLK/DATA,1bit/4bit模式)。如何读芯片手册,分析原理图,用示波器和逻辑分析仪定位硬件问题。 第三章,    内核编程 2.6的新特性:增加了SCHED_EDF调度器,支持RT-Preempt,POSIX线程模型,虚拟内存的反向映射(R-MAP),日志文件系统EXT4,ALSA音频,platform(bus,device, driver)驱动模型,电源管理(cpufreq, cpuidle, hotplug, runtimePM, QoS等),IPsec, sysfs。 3.0的新特性:DTS。 Kernel目录:arch,block, crypto, documentation, drivers, fs, include, init, ipc,kernel, lib, mm, net, scripts, security, sound, usr。 内核组成部分。进程调度(uninterruptible不可被signal唤醒),内存管理(buddy, slab等。Kswapd用于页面回收),虚拟文件系统VFS,网络接口PF,进程间通信(Android Binder)。ARM的工作模式(USR,FIR,IRQ等),X86工作模式(R0-R3)。 Linux内核编译和加载。Menuconfig,Kconfig,Makefile。obj-(y,m)。Kconfig的格式,配置项(bool, tristate, string, hex,int),select, depends on, help, source(包含别的config),子菜单menu…endmenu。Choice…endchoice, if…endif等。启动时,DTB可以跟在zImage的后面或者由uboot将其地址放到r2寄存器(r1放ATAG)中。.dt_compat,包含在DT_MACHINE_START与END之间,定义了设备相关的回调函数,如reserve。Init程序一般有busybox, systemd, sysVinit等。 Linux用的GNU C与ANSI C稍有区别。比如支持__attribute__(),data[0]数组,可变参数宏,case 0..9等。 工具链可以自己从crosstool-ng.org上下载源码,自己编译。对ARM来说,可以从linaro.org上下载。