网站建设到本地,公司网站需要备案,阿里巴巴做网站需要多少钱,宜城网站建设复习了下uboot#xff0c;内核#xff0c;根文件系统#xff0c;简单概括下三者的主要内容。
1 uboot
uboot的目的#xff1a;启动内核。
uboot的功能可以分为两个阶段任务。
1.2.1 uboot第一阶段
uboot第一阶段主要负责硬件相关的初始化#xff0c;主要在cpu/arm920…复习了下uboot内核根文件系统简单概括下三者的主要内容。
1 uboot
uboot的目的启动内核。
uboot的功能可以分为两个阶段任务。
1.2.1 uboot第一阶段
uboot第一阶段主要负责硬件相关的初始化主要在cpu/arm920t/start.S中
关闭看门狗初始化SDRAM设置栈设置时钟代码重定位(从flash拷贝到SDRAM中)调用start_armboot函数。
1.2.2 uboot第二阶段
第二阶段是在start_armboot这个C函数中做的
norflash初始化和nandflash初始化然后main_loop等待输入的命令在里面有一个sgetenv(bootcmd)然后在倒计时到达之前没有收到空格命令的话(假如我们在倒数记时的时候输入了空格就会等待输入命令)就会执行run_command(s,0)这里的s就是bootcmd也就是bootcmdnand read.jffs2 0x30007FC0 kernel; bootm ox30007FC0。这条命令的意思是从nandflash上面的kernel分区把内核读到SDRAM的ox30007FC0地址然后从这个地址启动。然后从flash上读出内核放入SDRAM中。设置启动参数uboot源码中用getenv(bootargs)读取bootarg参数bootargs就是类似bootargsnoinitrd root/dev/mtdblock3 init/linuxrc consolettySAC0读出来之后放到一个tag地址那里然后启动内核的时候会把这个tag地址传给启动函数然后内核就可以去tag那里读到bootarg的那些环境变量。跳到入口地址启动内核。
2 内核
内核的目的运行应用程序。
内核启动分两个阶段
第一阶段主要是head.S读取第二个参数看一下是否支持这个单板第二阶段主要是start_kernel首先进行了各种初始化然后处理uboot传过来的第三个参数根据这个第二个参数初始化控制台以及挂接根文件系统然后再init_post里面启动应用程序。
3 根文件系统
应用程序位于根文件系统上面要想运行应用程序我们还要构建根文件系统。
启动第一个程序内核在init_post里面启动应用程序首先打开/dev/console(一般也就是串口)然后判断如果我们的命令行参数里面有“init”例如init/linuxrc那么就会启动这个程序如果命令行中没有“init”,那么就会启动/sbin/init, /etc/init, /bin/init/ /bin/sh这五个程序中的一个所以一般来说我们内核启动的第一个应用程序是execute_command或者/sbin/init。init进程分析sbin/init应该会有一个配置文件配置文件里面指定了后续要用哪些应用程序然后init进程去解析配置文件然后根据配置文件去执行程序。