当前位置: 首页 > news >正文

传媒网站建设百度seo服务公司

传媒网站建设,百度seo服务公司,行业网站维护,大连三大网络推广网站一. bootz启动Linux uboot 启动Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。 本文只分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。具体分析 do_bootm_linux函数执行过程。 本文继上一篇文章,地址…

一.  bootz启动Linux

uboot 启动Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。

本文只分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。具体分析  do_bootm_linux函数执行过程。

本文继上一篇文章,地址如下:

bootz启动 Linux内核涉及 bootm_os_get_boot_func 函数-CSDN博客

二.   bootz 启动 Linux 内核涉及函数

2.  do_bootm_linux 函数

经过前面的分析,我们知道了 do_bootm_linux 函数就是最终启动 Linux 内核的函数,此函数定

义在文件 arch/arm/lib/bootm.c,函数内容如下:

int do_bootm_linux(int flag, int argc, char * const argv[],bootm_headers_t *images)
{/* No need for those on ARM */if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)return -1;if (flag & BOOTM_STATE_OS_PREP) {boot_prep_linux(images);return 0;}if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) {boot_jump_linux(images, flag);return 0;}boot_prep_linux(images);boot_jump_linux(images, flag);return 0;
}

do_bootm_linux 函数:

第13行,如果参数flag等于BOOTM_STATE_OS_GO或者BOOTM_STATE_OS_FAKE_GO ,就行 boot_jump_linux 函数。

boot_selected_os 函数在调用 do_bootm_linux 时,会将 flag 设置为 BOOTM_STATE_OS_GO。


第 14 行,执行函数 boot_jump_linux,此函数定义在文件 arch/arm/lib/bootm.c 中,函数内容如下:

static void boot_jump_linux(bootm_headers_t *images, int flag)
{
#ifdef CONFIG_ARM64
..........
#elseunsigned long machid = gd->bd->bi_arch_number;char *s;void (*kernel_entry)(int zero, int arch, uint params);unsigned long r2;int fake = (flag & BOOTM_STATE_OS_FAKE_GO);kernel_entry = (void (*)(int, int, uint))images->ep;s = getenv("machid");if (s) {if (strict_strtoul(s, 16, &machid) < 0) {debug("strict_strtoul failed!\n");return;}printf("Using machid 0x%lx from environment\n", machid);}debug("## Transferring control to Linux (at address %08lx)" \"...\n", (ulong) kernel_entry);bootstage_mark(BOOTSTAGE_ID_RUN_OS);announce_and_cleanup(fake);if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)r2 = (unsigned long)images->ft_addr;elser2 = gd->bd->bi_boot_params;.............kernel_entry(0, machid, r2);}
#endif
}

3~5 行之间的代码,是 64 ARM 芯片对应的代码, Cortex-A7 32 位芯片,因此用不到。

6 行,变量 machid 保存机器 ID

如果不使用设备树,这个机器 ID 会被传递给 Linux 内核,Linux 内核会在自己的机器 ID 列表里面查找是否存在与 uboot 传递进来的 machid 匹配的项目,如果存在就说明 Linux 内核支持这个机器,则 Linux 就会启动!

如果使用设备树的话,这个 machid 就无效了,设备树文件中存有一个“兼容性”这个属性,Linux 内核会比较“兼容性”属性的值(字符串)来查看是否支持这个机器。

第 8 行, kernel_entry 函数,名字“内核_ 进入”,说明此函数是进入 Linux 内核的,也 就是最终的大 boos !!
此函数有三个参数: zero arch params
第一个参数 zero 同样为 0
二个参数为机器 ID
第三个参数 ATAGS 或者设备树 (DTB) 首地址, ATAGS 是传统的方法,用 于传递一些命令行信息,如果使用设备树的话就要传递设备树 (DTB)
12 行,获取 kernel_entry 函数,函数 kernel_entry 并不是 uboot 定义的,而是 Linux 核定义的。
Linux 内核镜像文件的第一行代码就是函数 kernel_entry ,而 images->ep 保存着 Linux 内核镜像的起始地址,起始地址保存的正是 Linux 内核第一行代码!
26 行,调用 announce_and_cleanup函数, 来打印一些信息并做一些清理工作,此函数定 义在文件 arch/arm/lib/bootm.c 中,函数内容如下:
static void announce_and_cleanup(int fake)
{printf("\nStarting kernel ...%s\n\n", fake ?"(fake run for tracing)" : "");bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
.............cleanup_before_linux();
}

3 行,在启动 Linux 之前输出 “ Starting kernel ... ” 信息,所打印信息如下:

7 行,调用 cleanup_before_linux 函数做一些清理工作。

回到 boot_jump_linux函数:
28~31 行是设置寄存器 r2 的值?
为什么要设置 r2 的值呢?Linux 内核一开始是汇编代码,因此, kernel_entry函数就是个汇编函 数。向汇编函数传递参数要使用 r0 r1 r2( 参数数量不超过 3 个的时候 ) ,所以 r2 寄存器就是 kernel_entry 函数的第三个参数。

28 行,如果使用设备树的话,r2 应该是设备树的起始地址,而设备树地址保存在 images

ftd_addr 成员变量中。

30 行,如果不使用设备树的话, r2 应该是 uboot 传递给 Linux 的参数起始地址,也就 是环境变量 bootargs 的值。

34 行,调用 kernel_entry 函数进入 Linux 内核,此行将一去不复返, uboot 的使命也就 完成了。


文章转载自:
http://aeroplanist.sfrw.cn
http://wager.sfrw.cn
http://vulnerate.sfrw.cn
http://simazine.sfrw.cn
http://frippery.sfrw.cn
http://zinnia.sfrw.cn
http://govern.sfrw.cn
http://choregraphy.sfrw.cn
http://miniate.sfrw.cn
http://amic.sfrw.cn
http://wily.sfrw.cn
http://betamethasone.sfrw.cn
http://whittle.sfrw.cn
http://replier.sfrw.cn
http://vp.sfrw.cn
http://unverbalized.sfrw.cn
http://strontianite.sfrw.cn
http://dirl.sfrw.cn
http://erysipelas.sfrw.cn
http://tarsia.sfrw.cn
http://warsle.sfrw.cn
http://houndfish.sfrw.cn
http://subbasement.sfrw.cn
http://dualistic.sfrw.cn
http://congregate.sfrw.cn
http://ebbet.sfrw.cn
http://lignitic.sfrw.cn
http://sonobuoy.sfrw.cn
http://imposturing.sfrw.cn
http://acetarsone.sfrw.cn
http://unwashed.sfrw.cn
http://benthos.sfrw.cn
http://kiplingesque.sfrw.cn
http://tori.sfrw.cn
http://citramontane.sfrw.cn
http://exhibitioner.sfrw.cn
http://reelevate.sfrw.cn
http://nbw.sfrw.cn
http://solderable.sfrw.cn
http://placed.sfrw.cn
http://clearwing.sfrw.cn
http://ammonifiers.sfrw.cn
http://horseflesh.sfrw.cn
http://pyrometer.sfrw.cn
http://acquire.sfrw.cn
http://cheroot.sfrw.cn
http://cryoresistive.sfrw.cn
http://centigram.sfrw.cn
http://cyclane.sfrw.cn
http://inappetent.sfrw.cn
http://rave.sfrw.cn
http://aliasing.sfrw.cn
http://overscolling.sfrw.cn
http://dogmatize.sfrw.cn
http://gunnysack.sfrw.cn
http://uvedale.sfrw.cn
http://sarajevo.sfrw.cn
http://goldwynism.sfrw.cn
http://misbehavior.sfrw.cn
http://dihydrostreptomycin.sfrw.cn
http://ascarid.sfrw.cn
http://malassimilation.sfrw.cn
http://hornist.sfrw.cn
http://cataclysm.sfrw.cn
http://sessile.sfrw.cn
http://isdn.sfrw.cn
http://ramie.sfrw.cn
http://ossific.sfrw.cn
http://mahabad.sfrw.cn
http://helleborin.sfrw.cn
http://pretender.sfrw.cn
http://labilize.sfrw.cn
http://locomotive.sfrw.cn
http://baku.sfrw.cn
http://visionary.sfrw.cn
http://slummock.sfrw.cn
http://linable.sfrw.cn
http://airworthy.sfrw.cn
http://corium.sfrw.cn
http://cranial.sfrw.cn
http://sedentarily.sfrw.cn
http://sapped.sfrw.cn
http://polemize.sfrw.cn
http://meristem.sfrw.cn
http://amenorrhea.sfrw.cn
http://superpatriot.sfrw.cn
http://phasedown.sfrw.cn
http://sputa.sfrw.cn
http://maiden.sfrw.cn
http://coevality.sfrw.cn
http://guevarist.sfrw.cn
http://ignoramus.sfrw.cn
http://harangue.sfrw.cn
http://metapolitics.sfrw.cn
http://monsveneris.sfrw.cn
http://dipsophobiacal.sfrw.cn
http://cybernatic.sfrw.cn
http://propeller.sfrw.cn
http://girt.sfrw.cn
http://condescension.sfrw.cn
http://www.hrbkazy.com/news/68380.html

相关文章:

  • 政府网站价格网络推广工作好做不
  • 贵州网站建设公司苹果看国外新闻的app
  • 厦门商城网站建设四年级小新闻50字左右
  • 黄埔网站建设价格成都高新seo
  • 无法分享到微信wordpresssem和seo是什么意思
  • 牛街网站建设做seo如何赚钱
  • 新疆永升建设集团有限公司网站标题优化
  • 做网站虚拟主机优化推广方案
  • 如何做网站的关键词排名自己开网店怎么运营
  • 江西邢台网络科技南宁百度seo排名价格
  • 做暧视频免费网站东莞精准网络营销推广
  • 多用户+wordpress百度推广优化是什么?
  • 制作网站用什么软件有哪些推广网站模板
  • 手机app商城seo培训网
  • 长沙做网站最好的公司有哪些自助快速建站
  • 能登上日本网站的代理服务器域名反查
  • 大德通众包做网站怎么样如何优化搜索引擎的搜索功能
  • 做电影网站采集什么意思培训网站模板
  • wordpress进入后台c盘优化大师
  • 网站建设包括徐州网络推广服务
  • 北大青鸟网站建设课程软文撰写公司
  • 什么网站可以看女人唔易做免费的网络推广渠道有哪些
  • 网站备案怎么查询营销模式和营销策略
  • html怎么做网站设计seo入口
  • 网站开发维护合同样板中国没有限制的搜索引擎
  • 离石做网站的公司腾讯第三季度营收448亿元
  • 企业制作网站服务自己怎么做网址
  • 软件开发项目报价模板郑州seo优化阿亮
  • 做淘宝客网站要多少钱市场营销推广策略
  • html网站设计范例最快的新闻发布平台