1、linux驱动开发与裸机开发的区别
Linux系统驱动和裸机驱动的主要区别在于运行时的环境和依赖。Linux系统驱动依赖于Linux内核提供的API和服务,而裸机驱动则是在没有操作系统支持的情况下直接与硬件交互。因此,两者的开发和调试方法也有很大差异。
2、驱动基础
2440里的IRAM ,ubuntu与ARM之间通过net(网络)连接
页表:记录虚拟地址与物理地址之间的关系。
norflash接在0地址,程序放在 norflash,上电后pc指向0地址,程序刚好可以运行。(程序放在nandflash就不能运行,pc没有指向)
要想访问nandflash,需要专用程序/控制逻辑。
内存:掉电数据丢失
flash:掉电不丢失
norflash和nandflash
我们开发板上的nandflash大小256M,norflash2M
norflash: 可线性访问,和内存的访问方式相同---有专用的数据、地址、控制总线
nandflash: 不可线性访问,需要有程序配合访问
内核的任务
加载完后先启动init进程(内核里的进程),init退化到应用层,init再创建其他进程(shell nfs等)
跟文件系统
bootloader:
bootloader放在nandflash里时:系统上电后,会自动搬移nandflash前4KB的程序到IRAM中,将0地址映射到0x40000000(IRAM的地址)地址处,bootloader在前4KB代码中初始化 好内存,并将自己剩余的部分搬移到内存中运行。
在norflash里时: 系统上电后,PC默认指向0地址处(norflash被连接到0地址处),直接运行norflash中的程序。
kernel:内核在nandflash时: bootloader 启动最后阶段将 nandflash 中的内核搬移到内存的 0x30008000 地址处,启动 0x30008000 地址处的内核内核在ubuntu时 : bootloader 通过 tftp 服务将 ubuntu 上的内核下载到内存的 0x30008000 地址处,启动 0x30008000 地址处的内核
rootfs:
nandflash: 直接挂载 nandflash 的 mtdblock3 分区(nandflash的分区)上的根文件系统ubuntu: 通过 nfs 服务挂载 ubuntu 上的根文件系统
移植方法
1、使用sd卡,运行nandflash里的程序,文件都在nandflash里,上图右
2 、见第5点,bootloader在norflash里,内核文件、根系统文件在ubunt,上图左(上述的绿色组合)
方法2调试方便、数据不在开发板上,在虚拟机上
3、bootloader程序的作用
4、uboot命令:
保存的位置在
5、Linux启动过程:
4.ping ip ,测试开发板与虚拟机是否链接成功
5.修改环境变量中的服务器ip,改为虚拟机的ip
6.从虚拟机的里下载内核,下载命令: tftp 0x30008000 uImage
下载到地址0x30008000处
7.挂载根文件系统:设置环境变量
8.启动内核
命令:bootm 0x30008000
9.遇到的问题
nfs版本不一样
解决方法: setenv bootargs root=/dev/nfs nfsroot=192.168.1.3:/home/linux/nfs/rootfs,nfsvers=3 ip=192.168.1.99 console=ttySAC0,115200 init=/linuxrc
对于:bootargs=console=ttySAC0 root=/dev/mtdblock3;
bootargs=console=ttySAC0向内核传参,ttySAC0是s3c2440的串口