各位网友们好,相信很多人对嵌入式pnux硬件实战都不是特别的了解,因此呢,今天就来为大家分享下关于嵌入式pnux硬件实战以及嵌入式pnux和pnux区别的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
本文目录一览
1、嵌入式系统Linux内核开发实战指南的目录
2、嵌入式pnux系统开发详解_嵌入式pnux系统介绍
嵌入式系统Linux内核开发实战指南的目录
第1部分 嵌入式系统硬件开发第1章 嵌入式系统概述 2这一章对嵌入式系统的概念及其特点和应用作了概括介绍,笔者根据自己多年的经验阐述了对嵌入式系统的理解,并对一些常见的嵌入式处理器的硬件数据进行了比较。1.1 嵌入式系统概念 21.2 嵌入式处理器 31.3 嵌入式系统应用 41.4 嵌入式系统发展 41.5 一些嵌入式处理器的硬件特性比较 5第2章 ARM处理器概述 16为了使本书内容完整,从第2章到第7章中的内容大部分是笔者 《ARM体系结构与编程》(详情参见附录中的参考文献)的笔记和心得,把与嵌入式系统开发和Linux内核密切相关的硬件知识进行了概括和整理,本章主要介绍了ARM处理器的特点、ARM处理器的体系架构版本和ARM处理器系列。2.1 ARM发展历程 162.2 ARM处理器特点 172.3 ARM处理器应用 172.4 ARM体系架构 182.4.1 ARM体系架构版本 182.4.2 ARM体系架构变种(Variant) 202.4.3 ARM体系架构版本命名格式 222.5 ARM处理器 222.5.1 ARM7系列处理器 232.5.2 ARM9系列处理器 242.5.3 ARM9E系列处理器 242.5.4 ARM10E系列处理器 252.5.5 SecurCore系列处理器 252.5.6 StrongARM处理器 262.5.7 Xscale处理器 26第3章 ARM指令及其寻址方式 27本章主要介绍了ARM处理器的指令和寻址方式以及ARM汇编伪指令,这是做ARM处理器应用系统底层软件开发必备的知识。3.1 ARM处理器的程序状态寄存器(PSR) 273.2 ARM指令的条件码 283.3 ARM指令介绍 293.3.1 跳转指令 293.3.2 数据处理指令 303.3.3 乘法指令 313.3.4 杂类算术指令 323.3.5 状态寄存器访问指令 323.3.6 Load/Store内存访问指令 333.3.7 批量Load/Store内存访问指令 343.3.8 LDREX和STREX指令 353.3.9 信号量操作指令 373.3.10 异常中断产生指令 373.3.11 ARM协处理器指令 373.4 ARM指令寻址方式 393.4.1 数据处理指令的操作数的寻址方式 393.4.2 字及无符号字节的Load/Store指令的寻址方式 433.4.3 杂类Load/Store指令的寻址方式 473.4.4 批量Load/Store指令的寻址方式 493.4.5 协处理器Load/Store指令的寻址方式 513.4.6 ARM指令的寻址方式总结 523.5 ARM汇编伪操作(Directive) 533.5.1 符号定义伪操作 543.5.2 数据定义伪操作 543.5.3 汇编控制伪操作 563.5.4 栈中数据帧描述伪操作 573.5.5 信息报告伪操作 573.5.6 其他伪操作 583.6 ARM汇编伪指令 593.7 Thumb指令介绍 60第4章 ARM处理器内存管理单元(MMU) 61本章主要介绍了ARM处理器内存管理单元(MMU)的工作原理,Linux内存管理功能是通过处理器硬件MMU实现的,在没有MMU的处理器系统中,Linux只能工作在物理地址模式,没有虚拟(线性)地址 的概念。4.1 ARM处理器中CP15协处理器的寄存器 614.1.1 访问CP15寄存器的指令 614.1.2 CP15寄存器介绍 624.2 MMU简介 704.3 系统访问存储 的过程 714.3.1 使能MMU时的情况 714.3.2 禁止MMU时的情况 714.3.3 使能/禁止MMU时应注意的问题 724.4 ARM处理器地址变换过程 724.4.1 MMU的一级映射描述符 734.4.2 MMU的二级映射描述符 744.4.3 基于段的地址变换过程 754.4.4 粗粒度大页地址变换过程 754.4.5 粗粒度小页地址变换过程 764.4.6 细粒度大页地址变换过程 764.4.7 细粒度小页地址变换过程 774.4.8 细粒度极小页地址变换过程 774.5 ARM存储 访问权限控制 784.6 TLB操作 794.6.1 使TLB内容无效 794.6.2 锁定TLB内容 794.6.3 解除TLB中被锁定的地址变换条目 804.7 存储访问失效 804.7.1 MMU失效(MMU Fault) 804.7.2 外部存储访问失效(External Abort) 81第5章 ARM处理器的Cache和Write Buffer 82本章主要介绍了ARM处理器高速缓存(Cache)和写缓存(Write Buffer)的工作原理,使读者了解如何提高处理器的性能。5.1 Cache和Write Buffer一般性介绍 825.1.1 Cache工作原理 825.1.2 地址映像方式 835.1.3 Cache写入方式原理简介 845.1.4 关于Write through和Write back 855.1.5 Cache替换策略 865.1.6 使用Cache的必要性 875.1.7 使用Cache的可行性 875.2 ARM处理器中的Cache和Write Buffer 885.2.1 基本概念 885.2.2 Cache工作原理 885.2.3 Cache地址映射和变换方法 895.2.4 Cache分类 905.2.5 Cache替换算法 915.2.6 Cache内容锁定 915.2.7 MMU映射描述符中B位和C位的含义 925.2.8 Cache和Writer Buffer编程接口 935.3 ARM处理器的快速上下文切换技术 945.3.1 FCSE概述 945.3.2 FCSE原理 945.3.3 FCSE编程接口 95第6章 ARM处理器存储访问 性问题 97本章介绍了在支持MMU、Cache和DMA的系统中可能出现的存储访问 性问题,以及Linux中解决类似问题的方法。6.1 存储访问 性问题介绍 976.1.1 地址映射关系变化造成的数据不 性 976.1.2 指令cache的数据不 性问题 986.1.3 DMA造成的数据不 问题 996.1.4 指令预取和自修改代码 996.2 Linux中解决存储访问 性问题的方法 99第7章 ARM处理器工作模式与异常中断处理 101本章主要介绍了ARM处理器的工作模式和异常中断处理过程,这是ARM处理器系统启动程序编写者或Bootloader开发人员的必备知识。7.1 ARM处理器工作模式 1017.2 ARM处理器异常中断向量表和优先级 1037.3 ARM处理器异常中断处理 1047.3.1 进入异常中断处理 1047.3.2 退出异常中断处理 1057.4 ARM处理器的中断(IRQ或FIQ) 109第8章 ARM处理器启动过程 110本章根据笔者的开发经验介绍了ARM处理器系统的启动过程以及编写ARM处理器系统启动程序需要注意的事项。8.1 ARM处理器上电/复位操作 1108.2 ARM处理器系统初始化过程 1118.3 ARM处理器系统初始化编程注意事项 111第9章 嵌入式系统设计与调试 113本章根据笔者10多年的开发经验介绍了嵌入式系统的设计流程和调试方法,列举了大量笔者工作中碰到的实际案例。本章内容对于嵌入式系统硬件开发和调试有较高的参考、指导价值。9.1 嵌入式系统设计流程 1139.2 嵌入式系统硬件原理设计与审核 1149.3 硬件设计工具软件 1179.4 嵌入式系统调试仿真工具 1179.5 嵌入式系统调试诊断方法 118第10章 自制简易JTAG下载烧写工具 123本章根据笔者自己制作简易JTAG线缆的经验,介绍了简易JTAG线缆的硬件原理和软件流程,这是初学者必备的最廉价的工具,必须 。10.1 JTAG简介 12310.1.1 一些基本概念 12410.1.2 JTAG接口信号 12410.1.3 TAP控制器的状态机 12510.1.4 JTAG接口指令集 12910.2 简易JTAG线缆原理 13010.2.1 PC并口定义 13010.2.2 PC并口的寄存器 13110.2.3 简易JTAG线缆原理图 13310.2.4 简易JTAG线缆烧写连接图(见图10 5) 13410.3 简易JTAG烧写代码分析 13510.3.1 简易JTAG烧写程序(flashp)使用说明 13510.3.2 flash与CPU连接及flash属性描述文件 13610.3.3 简易JTAG烧写程序的执行逻辑和流程 138第2部分 Linux内核开发初步第11章 Bootloader 142本章根据笔者的工作经验介绍了流行的几种Bootloader、Bootloader应该具备的基本功能以及Bootloader的裁剪与移植。11.1 Bootloader的任务和作用 14211.2 各种各样的Bootloader 14311.3 Bootloader编译环境 14411.4 Bootloader的移植与裁减 14511.5 编译Bootloader 14511.6 烧写Bootloader 14611.7 Bootloader使用举例 14811.8 Bootloader修改举例 149第12章 创建嵌入式Linux开发环境 151本章介绍了如何创建嵌入式系统Linux内核交叉开发环境,本章和后续3章的内容是嵌入式系统Linux内核开发的基础,必须 。12.1 安装Linux host 15112.2 在虚拟机 装Linux host 15212.3 安装Linux交叉编译环境 15712.4 在主机上设置TFTP Server 16012.5 在主机上设置DHCP Server 16112.6 在主机上设置Telnet server 16112.7 在开发过程中使用NFS 16212.8 设置超级终端 163第13章 编译Linux内核 166本章介绍了Linux内核的配置和编译方法。13.1 获取Linux内核源代码 16613.2 Linux内核目录结构 16613.3 配置Linux内核 16713.4 编译Linux内核 168第14章 创建Linux根文件系统 170本章介绍了Linux的根文件系统的结构以及创建根文件系统的方法。14.1 根文件系统概述 17014.2 根文件系统目录结构 17114.3 获取根文件系统组件源代码 17114.4 编译根文件系统源代码 17114.5 创建一个32MB的RAMDISK根文件系统 17314.6 在根文件系统中添加驱动模块或者应用程序 173第15章 固化Linux内核和根文件系统 174本章介绍了固化(烧写)Linux内核和根文件系统的方法。第16章 关于Cpnux 176本章简要介绍了Cpnux与 Linux的区别。16.1 Cpnux简介 17616.2 Cpnux源代码目录结构 17716.3 Cpnux与 Linux的区别 17816.4 编译Cpnux 179第3部分 Linux 2.6内核原理第17章 Linux 2.6.10@ARM启动过程 182本章以start_kernel()和init()函数中调用到的函数说明的方式,介绍了从Linux汇编代码入口到init内核进程最后调用用户 init命令的Linux整个启动过程。本章内容是笔者第一次 Linux内核源代码时对这些函数的注释,仅供读者了解start_kernel()和init()函数中调用到的每个函数的大致功能时使用。17.1 Linux 2.6.10中与ARM处理器平台硬件相关的结构和全局变量 18217.1.1 相关数据结构 18217.1.2 相关全局变量 18717.2 Linux汇编代码入口 18917.3 Linux汇编入口处CPU的状态 18917.4 start_kernel()函数之前的汇编代码执行过程 19017.5 start_kernel()函数中调用的函数介绍 19217.5.1 lock_kernel()函数 19217.5.2 page_address_init()函数 19217.5.3 printk(pnux_banner) 19317.5.4 setup_arch(&command_pne)函数 19317.5.5 setup_per_cpu_areas()函数 19817.5.6 p_prepare_boot_cpu()函数 19917.5.7 sched_init()函数 19917.5.8 build_all_zonepsts()函数 20017.5.9 page_alloc_init()函数 20017.5.10 printk(Kernel command pne %s\n, saved_command_pne) 20117.5.11 parse_early_param()函数 20117.5.12 parse_args()函数 20117.5.13 sort_main_extable()函数 20217.5.14 trap_init()函数 20217.5.15 rcu_init()函数 20217.5.16 init_IRQ()函数 20317.5.17 pidhash_init()函数 20317.5.18 init_timers()函数 20317.5.19 softirq_init()函数 20417.5.20 time_init()函数 20417.5.21 console_init()函数 20517.5.22 profile_init()函数 20617.5.23 local_irq_enable()函数 20717.5.24 vfs_caches_init_early()函数 20717.5.25 mem_init()函数 20817.5.26 kmem_cache_init()函数 21017.5.27 numa_popcy_init()函数 22517.5.28 capbrate_delay()函数 22717.5.29 pidmap_init()函数 22817.5.30 pgtable_cache_init()函数 22917.5.31 prio_tree_init()函数 22917.5.32 anon_vma_init()函数 22917.5.33 fork_init(num_physpages)函数 22917.5.34 proc_caches_init()函数 23017.5.35 buffer_init()函数 23117.5.36 unnamed_dev_init()函数 23117.5.37 security_init()函数 23117.5.38 vfs_caches_init(num_physpages)函数 23217.5.39 radix_tree_init()函数 23717.5.40 signals_init()函数 23717.5.41 page_writeback_init()函数 23717.5.42 proc_root_init()函数 23817.5.43 check_bugs()函数 24017.5.44 acpi_early_init()函数 24417.5.45 rest_init()函数 24417.6 init()进程执行过程 26517.6.1 p_prepare_cpus(max_cpus)函数 26517.6.2 do_pre_ p_initcalls()函数 26517.6.3 fixup_cpu_present_map()函数 26717.6.4 p_init()函数 26717.6.5 sched_init_ p()函数 26817.6.6 populate_rootfs()函数 26817.6.7 do_basic_setup()函数 28317.6.8 sys_access()函数 29217.6.9 free_initmem()函数 30117.6.10 unlock_kernel()函数 30117.6.11 numa_default_popcy()函数 30217.6.12 sys_dup()函数 30217.6.13 execve()函数 302第18章 Linux内存管理 305从本章开始,笔者将带领读者走进神秘的Linux内核世界。笔者在 内核源代码以及两本相关参考书(见参考文献)的基础上,以自己的理解和语言总结概括了Linux内核每个组件的原理。笔者对与每个内核组件相关的关键数据结构和全局变量作了尽量详尽的说明,并且对核心函数进行了详细注释,在向读者灌输理论知识的同时引导读者自己去 、分析Linux内核源代码。本章讲解了Linux内核第一大核心组件“内存管理”的原理和实现内幕。18.1 Linux内存管理概述 30518.1.1 Linux内存管理的一些基本概念 30518.1.2 内存管理相关数据结构 30918.1.3 内存管理相关宏和全局变量 33018.1.4 Linux内存管理的任务 34118.1.5 Linux中的物理和虚拟存储 布局 34118.2 为虚拟(线性地址)存储 建立页表 34518.3 设置存储 的访问控制属性 34818.4 Linux中的内存分配和释放 35018.4.1 在系统启动初期申请内存 35018.4.2 系统启动之后的内存分配与释放 360第19章 Linux进程管理 480本章讲解了Linux内核第二大核心组件“进程管理”的原理和实现内幕。19.1 进程管理概述 48019.1.1 进程相关概念 48019.1.2 进程分类 48119.1.3 0号进程 48119.1.4 1号进程 48119.1.5 其他一些内核线程 48219.1.6 进程描述符(struct task_struct) 48219.1.7 进程状态 48219.1.8 进程标识符(PID) 48319.1.9 current宏定义 48419.1.10 进程链表 48419.1.11 PID hash表和链表 48519.1.12 硬件上下文(Hardware Context) 48519.1.13 进程 限制 48519.1.14 进程管理相关数据结构 48619.1.15 进程管理相关宏定义 50219.1.16 进程管理相关全局变量 51419.2 进程管理相关初始化 52019.3 进程创建与删除 52919.4 进程调度 55119.4.1 进程类型 55319.4.2 进程调度类型 55419.4.3 基本时间片计算方法 55519.4.4 动态优先级算法 55619.4.5 交互式进程 55619.4.6 普通进程调度 55719.4.7 实时进程调度 55719.4.8 进程调度函数分析 55819.5 进程切换 57619.6 用户态进程间通信 58119.6.1 信号(Signal) 58119.6.2 管道(pipe)和FIFO(命名管道) 62719.6.3 进程间通信原语(System V IPC) 641第20章 Linux文件管理 651本章讲解了Linux内核第三大核心组件“文件系统”的原理和实现内幕。20.1 文件系统概述 65120.1.1 Linux文件管理相关概念 65220.1.2 Linux文件管理相关数据结构 65720.1.3 Linux文件管理相关宏定义 68220.1.4 Linux文件管理相关全局变量 69120.2 文件管理相关初始化 69920.3 文件系统类型注册 71120.4 挂接文件系统 71220.5 文件系统类型超级块读取 73020.5.1 get_ _single() 超级块读取函数 73120.5.2 get_ _nodev() 超级块读取函数 73720.5.3 get_ _bdev() 超级块读取函数 73820.5.4 get_ _pseudo() 超级块读取函数 74020.6 路径名查找 74720.7 访问文件操作 75920.7.1 打开文件 75920.7.2 关闭文件 76620.7.3 读文件 76820.7.4 写文件 78520.8 异步I/O系统调用 79220.9 Linux特殊文件系统 79220.9.1 rootfs文件系统 79320.9.2 sysfs文件系统 79720.9.3 devfs设备文件系统 80020.9.4 bdev块设备文件系统 80320.9.5 ramfs文件系统 80420.9.6 proc文件系统 80420.10 磁盘文件系统 81320.10.1 ext2文件系统相关数据结构 81320.10.2 ext2文件系统磁盘分区格式 81920.10.3 ext2文件系统的各种文件 82020.10.4 创建ext2文件系统 82120.10.5 ext2文件系统的操作方法 82220.11 关于initramfs 82420.11.1 initramfs概述 82420.11.2 initramfs与initrd的区别 82420.11.3 initramfs相关全局变量 82520.11.4 initramfs被编译链接的位置 82520.11.5 initramfs文件的生成过程 82520.11.6 initramfs二进制文件格式说明(cpio格式) 82820.11.7 initramfs二进制文件和列表文件对照示例 82920.11.8 initramfs利弊 83020.12 关于initrd 83020.12.1 initrd概述 83020.12.2 initrd相关全局变量 83120.13 关于gzip压缩文件 832第21章 Linux模块设计 834本章讲解了Linux内核模块程序与应用程序的区别以及如何编写和加载Linux内核模块程序。21.1 Linux模块设计概述 83421.2 Linux的内核 和用户 83421.3 内核模块与应用程序的区别 83521.4 编译模块 83721.5 装载和卸载模块 83721.6 模块层叠 83821.7 模块版本依赖 83921.8 模块编程示例 839第22章 Linux系统异常中断管理 841本章讲解了Linux内核如何管理系统异常中断以及Linux系统调用的实现内幕。22.1 Linux异常中断处理 84122.2 指令预取和数据访问中止异常中断处理 84922.2.1 指令预取中止异常中断处理 85022.2.2 数据访问中止异常中断处理 85822.3 Linux中断处理 86322.3.1 内核模式下的中断处理 86322.3.2 用户模式下的中断处理 86722.4 从中断返回 86822.5 Linux中断管理 86922.5.1 Linux中断管理相关数据结构与全局变量 87022.5.2 Linux中断管理初始化 87222.5.3 安装和卸载中断处理程序 87422.5.4 使能和禁止中断 87822.6 Linux系统调用 88022.6.1 Linux系统调用内核实现过程 88022.6.2 从系统调用返回 88922.6.3 Linux系统调用用户程序接口函数 89022.6.4 Linux系统调用用户接口函数与内核实现函数之间参数传递 899第23章 Linux软中断和工作队列 901本章讲解了Linux内核中的两种延迟处理机制“软中断”和“工作队列”的原理和实现。23.1 概述 90123.2 Linux软中断 90223.2.1 软中断相关数据结构和全局变量 90323.2.2 软中断初始化 90423.2.3 软中断的核心操作函数do_softirq() 90823.2.4 软中断看护进程执行函数ksoftirqd() 91223.2.5 如何使用软中断 91323.3 Linux工作队列 91823.3.1 Linux工作队列相关数据结构和全局变量 91823.3.2 Linux工作队列初始化 92123.3.3 将工作加入到工作队列中 92423.3.4 工作者进程执行函数worker_thread() 92823.3.5 使用Linux工作队列 931第24章 Linux并发与竞态 933本章讲解了Linux内核同步机制,包括几种锁定技术以及免锁算法。24.1 并发与竞态概述 93324.1.1 Linux中的并发源 93424.1.2 竞态可能导致的后果 93424.1.3 避免竞态的规则 93424.2 消除竞态的“锁定”技术 93524.2.1 信号量(semphore)和互斥体(mutual exclusion) 93524.2.2 读写信号量(rw_semaphore) 93824.2.3 完成量(completion) 94124.2.4 自旋锁(spinlock_t) 94224.2.5 读写自旋锁(rwlock_t) 94624.2.6 使用“锁定”技术的注意事项 94924.3 消除竞态的非“锁定”方法 94924.3.1 免锁算法 94924.3.2 原子操作 95024.3.3 位操作 95124.3.4 顺序锁 95224.3.5 读 更新(Read Copy Update,RCU) 954第25章 Linux设备驱动程序 958本章讲解了Linux内核第四大核心组件“设备驱动”的原理和实现内幕。同时还总结归纳了编写各种设备驱动程序的方法和步骤。25.1 设备驱动程序概述 95825.1.1 设备驱动程序组成部分 95925.1.2 设备号 95925.1.3 设备文件 96025.1.4 编写设备驱动程序的关键 96125.2 字符设备驱动程序 96125.2.1 字符设备相关数据结构 96125.2.2 字符设备相关全局变量 96325.2.3 字符设备驱动程序全局初始化 96325.2.4 为字符设备分配设备号 96425.2.5 注册字符设备驱动程序 96825.2.6 字符设备的操作方法 97125.2.7 用户对字符设备驱动程序的调用过程 97225.2.8 如何编写字符设备驱动程序 97425.2.9 关于TTY设备驱动程序 97425.2.10 控制台设备驱动程序 97525.3 块设备驱动程序 98625.3.1 块设备相关数据结构 98625.3.2 块设备相关宏定义 99725.3.3 块设备相关全局变量 99925.3.4 块设备驱动程序全局初始化 100425.3.5 为块设备分配主设备号 100625.3.6 注册块设备驱动程序 100925.3.7 块设备驱动程序的操作方法 101725.3.8 调用块设备驱动程序过程 101725.3.9 I/O调度 103125.3.10 如何编写块设备驱动程序 103225.4 网络设备驱动程序 103325.4.1 网络设备驱动程序概述 103325.4.2 网络设备相关数据结构 103425.4.3 网络设备相关宏定义 104425.4.4 网络设备相关全局变量 104525.4.5 创建net_device结构 104625.4.6 注册网络设备 104825.4.7 网络设备的操作方法 105025.4.8 网络设备中断服务程序 105125.4.9 如何编写网络设备驱动程序 105125.5 PCI设备驱动程序 105225.5.1 PCI接口定义 105325.5.2 PCI设备的三个地址 105725.5.3 PCI总线仲裁 105825.5.4 PCI设备编号 105925.5.5 如何访问PCI配置 105925.5.6 如何配置PCI设备 106125.5.7 PCI驱动程序相关数据结构 106225.5.8 PCI驱动程序相关宏定义 106825.5.9 PCI驱动程序相关全局变量 106825.5.10 Bootloader和内核做的事 106925.5.11 PCI驱动程序注册 106925.5.12 PCI驱动程序接口函数 107125.5.13 如何编写PCI驱动程序 1072第4部分 Linux内核开发高级指南第26章 Linux系统参数设置 1076从本章开始的后续章节主要讲解了比较高级或者平时较少关注的Linux内核方面的知识,本章讲解了Linux中的4种系统参数格式和设置方法。26.1 旗语系统参数(tag) 107626.1.1 与旗语系统参数相关数据结构和全局变量 107626.1.2 旗语系统参数说明 108226.1.3 旗语系统参数设置方法 108426.2 前期命令行设置的系统参数 108426.2.1 与前期命令行系统参数相关数据结构和全局变量 108426.2.2 前期命令行设置的系统参数说明 108526.2.3 前期命令行系统参数设置方法 108626.2.4 如何添加自己的前期命令行设置的系统参数 108726.3 式命令行系统参数 108726.3.1 与 式命令行系统参数相关数据结构和全局变量 108726.3.2 式命令行设置的系统参数说明 108826.3.3 式命令行设置的系统参数设置方法 108926.3.4 如何添加自己的 式命令行设置的系统参数 108926.4 命令行系统参数 108926.4.1 与命令行系统参数相关数据结构和全局变量 108926.4.2 命令行设置的系统参数说明 109026.4.3 命令行设置的系统参数设置方法 1090第27章 Linux内核调试 1091本章介绍了Linux内核的调试方法。27.1 打开Linux内核及其各模块自带的调试开关 109127.2 内核剖析(Profipng) 109327.3 通过打印调试(printk) 109527.3.1 关于printk() 109527.3.2 内核信息级别 109627.3.3 打印速度限制 109727.3.4 控制台重定向 109827.4 使用proc文件系统调试 109827.5 oops消息 109827.6 通过跟踪命令strace调试 109927.7 使用gdb、kdb、kgdb调试 1099第28章 Linux内核移植 1101本章介绍了Linux内核的移植方法。第29章 Linux内核优化 1104本章介绍了Linux内核的优化方法。29.1 编译优化 110429.2 根据CPU特性进行优化 110529.3 对内核进行裁减 110529.4 优化系统内存配置 110629.5 优化系统启动过程以缩减系统启动时间 110629.6 内存映射优化 110729.7 工具软件辅助优化 1107第30章 Linux定时器 1109本章介绍了Linux内核的软件定时器。30.1 定时器相关数据结构 110930.2 定时器相关宏定义 111130.3 定时器相关全局变量 111230.4 定时器和时钟初始化 111330.5 获取系统时间 111430.6 延迟函数 111530.7 与定时器相关系统调用 111530.8 使用定时器方法 1116第31章 杂项 1117本章介绍了PER_CPU变量以及Linux中的数据类型定义。31.1 per_cpu变量 111731.2 Linux中的数据类型定义 1118第32章 编译链接文件说明 1119本章注释了ARM处理器系统中Linux内核的链接文件,以帮助读者了解编译出来的Linux内核各区段在内存中的存放位置。参考文献 1125
嵌入式pnux系统开发详解_嵌入式pnux系统介绍
嵌入式Linux开发从下到上分为:嵌入式硬件开发、嵌入式驱动开发、嵌入式系统开发、嵌入式软件开发。
一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件, 模拟电路和数字电路设计的开发能力。熟练 嵌入式硬件知识,熟悉硬件开发模式和设计模式,熟悉ARM32位处理器嵌入式硬件平台开发、并具备产品开发经验。精通常用的硬件设计工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般需要有4~8层高速PCB设计经验。
二、嵌入式驱动开发:熟练 Linux操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM开发,至少 Linux字符驱动程序开发。具有单片机、ARM嵌入式处理器的移植开发能力,理解硬件原理图,能独立完成相关硬件驱动调试,具有扎实的硬件知识,能够根据芯片手册编写软件驱动程序。
三、嵌入式系统开发: Linux系统配置,精通处理器体系结构、编程环境、指令集、寻址方式、调试、汇编和混合编程等方面的内容; Linux文件系统制作,熟悉各种文件系统格式(YAFFS2、JAFFS2、RAMDISK等);熟悉嵌入式Linux启动流程,熟悉Linux配置文件的修改; 内核裁减、内核移植、交叉编译、内核调试、启动程序Bootloader编写、根文件系统制作和集成部署Linux系统等整个流程;、熟悉搭建Linux软件开发环境(库文件的交叉编译及环境配置等);
四、嵌入式软件开发:精通Linux操作系统的概念和安装方法、Linux下的基本命令、管理配置和编辑器,包括VI编辑器,GCC编译器,GDB调试器和Make项目管理工具等知识;精通C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识、数据结构的基础内容,包括链表、队列等; 面向对象编程的基本思想,以及C语言的基础内容;精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库;熟悉常用的图形库的编程,如QT、GTK、miniGUI、fltk、nano x等。
所以如果你要做嵌入式软件开发的话,上面那些知识基本够用了。