linux启动

1 uboot与norflash与nandflash:

norflash能读不能写,当设定从norflash启动时,处理器将norflash映射0地址进行启动;当uboot小于4K时,将内部sram映射0地址,从而将uboot拷贝到nandflash进行启动;如果uboot大于4K,此时先从norflash启动,然后用tftp工具{连接好网线以后,你的电脑网络状态还是没有连接的,所以需要uboot主动发起网络,电脑端就会有网络链接状态显示了;在进行网络通信过程中,要记得关掉电脑主机的防火墙,以便链接失败}将uboot拷贝到sdram的指定位置,在将sdram中的内容写入nandflash;重启后设定从nandflash启动即可。

uboot是linux的bootloader(单任务裸机程序),uboot的工作就是把这些固件放在编译链接所规定的运行地址处进行运行即可。uboot重要的工作是将内核以及配置参数搬进ram.往往RAM分配的地址比较高,而整个程序往往都是0地址开始执行了的如果让存储地址与运行地址相同来进行编译,会导致最终烧录文件非常之大,并且中间有一大片地址区域是无效的。链接文件中通过制定链接地址对应的运行地址,届时有相关指令进行搬运,从而让固件紧缩尺寸。

 2

单片机的Flash大部分为NorFlash,而linux用的nandflash有时存在坏快,此时就需要进行调整跳过坏快,否则就会因为有坏快程序不完整不能运行。

移植固件可以用patch差分固件包(相对于标准发行版)还原直接生成目标固件。

uboot和内核启动后的驱动是不同的。类比bootloader用的外设和APP用的外设驱动需要分开写。

设备驱动:

Linux设备与驱动分开,所谓的驱动移植适配基本上驱动部分不用太多修改,仅仅只需要把驱动部分根据Linux提供的框架进行相应的描述填充即可,说得直白一点就是填充再赋值结构体。

驱动程序可以编译成.ko,在内核启动后加载;也可以直接编译到内核中。

文件系统:在VFS下内核首先挂载根路径

busybox就是一个制作根文件系统的安装程序。通过配置工具设置好内容进行编译安装就生成系统所须的根文件内容。

动态链接:构建自己的glibc

在编译busybox的时候,其编译选项采用的是【No shared libs】,然后需要构建自己的glibc.动态链接至少要准备加载器和动态库,因为编译器在编译程序的时候也有可能使用到这些库,所以这些在交叉编译器中已经存在了,只需要拷贝相应的文件到/lib中即可。

udev是linux下的一个管理/dev下设备节点的管理器,驱动程序提供信息(设备文件名、设备号),udev便会根据驱动提供的信息自动创建设备文件,才会注册生成相应的设备节点。那么mdev就是busybox中的udev的简化版本。所以为了支持mdev,需要系统支持sysfs和tempfs.

 NFS服务:调试过程有2种使用场景:1将PC的共享路径以NFS形式挂载到嵌入式系统的根文件系统下,实现PC与嵌入式系统的文件共享和拷贝;2将PC的根目录以nfs形式挂载在嵌入式系统的根路径,并设置启动位nfs boot,这样嵌入式就以pc的根系统作为启动文件系统,即扩展了嵌入式系统的空间又避免调试过程的文件拷贝。NFS常需要依靠portmap或者rpcbind服务(前Ubuntu14.4以后都只使用)。

 

posted on 2025-03-08 14:26  杰瑞鼠  阅读(21)  评论(0)    收藏  举报