linux内核移植s3c2410,移植正式开始2
内核启动的现在已经是开始执行函数start_kernel函数了。start_kernel函数在init/main.c中定义。start_kernel函数只是完成
相应的结构的初始化任务。
printk(KERN_NOTICE);
printk(linux_banner);
setup_arch(&command_line);
在uboot的一直过程中,uboot传递给kernel的参数:预先存放在某个地方的tag和机器类型id,机器类型id在函数__look_up_machine
中已经使用,tag列表是在函数setup_arch中调用的。setup_arch函数是在arch/arm/kernel/setup.c中定义:
void __init setup_arch(char **cmdline_p)
{
....
setup_processor(); // 处理器相关的设置
mdesc = setup_machine(machine_arch_type); // 得到machine_desc结构
machine_name = mdesc->name;
...
if (mdesc->boot_params) // 定义了uboot的参数
tags = phys_to_virt(mdesc->boot_params); // 得到uboot参数tag地址
...
if (tags->hdr.tag == ATAG_CORE) {
if (meminfo.nr_banks != 0) // 在内核中定义了meminfo
squash_mem_tags(tags); // 忽略内存中的信息
parse_tags(tags); // 解析tag
}
...
memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
parse_cmdline(cmdline_p, from); // 解析命令行
paging_init(&meminfo, mdesc); // 重新初始化页表
request_standard_resources(&meminfo, mdesc);
...
}
上面函数的疑问是if (mdesc->boot_params) // 定义了uboot的参数,uboot的参数是在那里定义的?答案就是在arch/arm/
mach-s3c2410/mach-smdk2410.c中定义:
MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
...
.boot_params = S3C2410_SDRAM_PA + 0x100,
MACHINE_END
然后就是函数parse_tags的
相关文档:
POSIX标准定义的头文件
<dirent.h> 目录项
<fcntl.h> 文件控制
<fnmatch.h> 文件名匹配类型
<glob.h> 路径名模式匹配类型
<grp.h> ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
所谓“阅兵”就是检阅部队的意思。
Linux
大军(发行版)可谓“散兵游勇”,谈何大阅兵?此言差矣。
......
嵌入式系统与通用PC机不同,一般没有硬盘这样的存储设备而是使用Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置,本文分析了嵌入式系统中常用的存储设备及其管理机制,介绍了常用的基于FLASH的文件系统类型。
1.嵌入式系统存储设备及其管理机制分析
构建适用于嵌入式系统的Li ......
下面这个例子列出了所有系统定义的错误代码及错误描述
源代码是:
/************关于本文档********************************************
*filename: strerror.c
*purpose: 列出了系统定义的所有错误代码及描述
*wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
Linux爱好者 Linux知识传播 ......