进入uboot后,输入printenv可以看到一个环境变量,bootcmd,这个环境变量里面内容的作用就是把内核从NandFlash中读取到SDRAM中,然后从SDRAM的加载地址启动内核。
一、内核是什么
内核实际上就是一个比较复杂庞大的裸板程序,只不过是内核无法自启动,必须借助boot来启动,内核运行起来后,在软件分层上分成了应用层和内核层,内核层可以随意的访问硬件,应用层无法随意的访问硬件资源,想要访问硬件资源必须open后产生软中断进入内核层。
内核的镜像文件是uImage,uImage是一个信息头+一个内核文件
#define IH_NMLEN 32 /* Image Name Length */
typedef struct image_header {
uint32_t ih_magic; /* Image Header Magic Number */
uint32_t ih_hcrc; /* Image Header CRC Checksum */
uint32_t ih_time; /* Image Creation Timestamp */
uint32_t ih_size; /* Image Data Size */
uint32_t ih_load; /* 加载地址 */
uint32_t ih_ep; /* 入口地址 */
uint32_t ih_dcrc; /* Image Data CRC Checksum */
uint8_t ih_os; /* Operating System */
uint8_t ih_arch; /* CPU architecture */
uint8_t ih_type; /* Image Type */
uint8_t ih_comp; /* Compression Type */