Linux嵌入式基础
linux base
1. 设备启动过程
1) 上电->POR
2) bootROM->SRAM=>uboot1
3) uboot1->uboot2
4) kernel->rootfs
5) init
2. uboot
>Makefile
>cpu/arm926ejs ->uboot1
u-boot.lds start.S
>board/smdk2440
/atmel/at91sam9261ek
>include/configs/at91sam9261ek.h
>lib_arm/board.c
start.S: start_armboot() -> uboot2
3. uboot汇编
1) linux手动切换模式到svc
2) linux/uboot仅用到ARM的svc和usr模式。
3) >异常向量表
>cpu_init_crit 关闭cache,mmu
>lowlevel_init 初始化晶振
>拷贝uboot2
4. kernel
>Makefile
>arch/arm/configs/at91sam9g10ek_defconfig
>arch/arm/mach-at91/board-sam9261ek.c
>make menuconfig
>arch/arm/kernel/head.S ->ENTRY(stext) 内核入口
中断优先级分配:arch/arm/mach-at91
5. static void __init ek_map_io(void)
__init为编译器连接标志
6. 驱动架构
platform_device <==> platform_driver
IORESOURCE_MEM IORESOURCE_IRQ
dm9000_device1.name = “dm9000”;
根据名字确认platform_driver。
网口设备不同处有两个:中断,地址。
平台设备驱动:
业务:地址,中断, platform_device:data,resource;
非业务:初始化,终端流程,TX/RX,platform_driver .probe。
platform_data =》word类型指针。
kernel先加载driver,然后driver来匹配device,.name相同时运行probe匹配device。
获知有->先申请资源->再用
ioremap物理地址->虚拟地址。
7. 修改.config文件后需要make menuconfig来刷新配置到.h文件中。
8. 启动时确认是否支持CPU,是否支持板卡。
CPU_ID, machine_id
9. linux内核配置
device_driver
JEDEC Flash =>Norflash
触摸屏Events
ADS7843
Serial device
8个8250
framebuffer
Bootup logo
USB:UHCI x | OHCI 选择
Real Time Clock
*set systemtime from RTC on startup
Rootfs on NFS
Native language support
10. 各种内核映像区别
vmlinux 调试信息
Image 去除调试信息
zImage 压缩
uImage uboot格式内核镜像,zImage前增加64字节
705用go指令引导zImage ==》修改了uboot的go指令,增加启动参数
802P用bootm指令引导uImage
11. 驱动
驱动只负责设备可正常工作,优先级不管。
设备文件,主设备号(大类),次设备号(小类)。
字符类型struct cdev。
cdev ----> 主、次 cdev_add
----> file_operations -->cdev_init
GFP_KERNEL(可休眠), GFP_ATOMIC(不休眠)。
12. fopen()带缓冲,不能直接操作设备文件。
13. 硬盘:盘片,扇区,磁道
14. 根文件系统
>内核启动默认挂载VFS,VFS挂载rootfs,rootfs挂载/proc/ /sys/
>proc:进程,系统信息(内核、驱动)
>sys:sysfs
>tmp:tmpfs
>/usr/bin,/usr/sbin用户级可执行程序
>/dev目录下至少有三个设备文件:console,null,ttyS0
mknod name c 13 1
>lib下一般放置两个库:libc.so,ld-2.3.2.so
交叉工具链中ldd拷贝到板卡上,测试用程序用的动态库。
15. 根文件系统制作流程
1) 目录;
2) 填充内容;
3) 打包;
4) 固化;
5) 挂载。
16. busybox中.config 配置CROSS_COMPILE,PREFIX(目录存放处),静态编译,shell:ash,显示信息带颜色coreutils->ls
17. MMU建立页表后,0~3G是用户空间(与物理内存无关系);
3G~4G为系统空间(固定偏移)。
用户空间open() -> glibc
-----------------------------------SWI
内核空间 系统调用 sysopen()
18. etc:inittab,fstab(mount –a),profile(环境变量),rcS(启动脚本)。
19. 命令行中串口命名:
drivers/serial/atmel
ttyS ttyAT
串口命名:通过驱动中serial中名字确定
20. make menuconfig前需安装sudo apt-get install libncurses5-dev。
21. PXA270 XSCALE介于ARM10和ARM11
NorFlash P30两片16位拼成32位
NandFlash控制器无,需模拟ALE,CLE
加密芯片没有用
只能从NorFlash启动
22. TI-AM335x
AM3352 A8
DDR短接
同一组信号线等长(误差),阻抗
分组等长:控制信号等长,数据信号等长
线阻抗:单端阻抗50 ohm,差分阻抗100 ohm
加密芯片未用
为防止偏移,外置触摸屏控制器,单独电源供电。
内核:网口内置,触摸屏,两串口扩展。