免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: _nosay
打印 上一主题 下一主题

[内核入门] trampoline.S代码疑问? [复制链接]

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
21 [报告]
发表于 2016-03-31 21:55 |只看该作者
回复 20# nswcfd

不懂,你搞懂了告诉我

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
22 [报告]
发表于 2016-04-01 10:34 |只看该作者
本帖最后由 _nosay 于 2016-04-01 11:05 编辑

回复 4# nswcfd

还发现了一点“r_base = .”与“r_here:”的区别,r_base类似“局部标号”,fun1()、fun2()都可以有“r_base = .”,页r_here类似“全局标号”,fun1()、fun2()如果都有“r_here:”,编译会报错,说r_here重复定义。

BP负责将trampoline.S(trampoline_data标号处)的代码设置到一个中断向量上,用于AP在处理IPI中断时过渡到保护模式,BP自己好像不执行这段代码,那BP是怎么过渡到保护模式的?
  1. void __init smp_boot_cpus(void)
  2. {
  3.         ...

  4.         for (apicid = 0; apicid < NR_CPUS; apicid++) {
  5.                 /*
  6.                  * Don't even attempt to start the boot CPU!
  7.                  */
  8.                 if (apicid == boot_cpu_id)  // 引导CPU跳过
  9.                         continue;

  10.                 if (!(phys_cpu_present_map & (1 << apicid)))
  11.                         continue;
  12.                 if ((max_cpus >= 0) && (max_cpus <= cpucount+1))
  13.                         continue;

  14.                 do_boot_cpu(apicid);  // 这里面会执行trampoline.S代码

  15.                 /*
  16.                  * Make sure we unmap all failed CPUs
  17.                  */
  18.                 if ((x86_apicid_to_cpu[apicid] == -1) &&
  19.                                 (phys_cpu_present_map & (1 << apicid)))
  20.                         printk("phys CPU #%d not responding - cannot use it.\n",apicid);
  21.         }

  22.         ...
  23. }
复制代码
setup.S里面发现:
  1. start:
  2.         jmp        trampoline

  3. ...

  4. trampoline:        call        start_of_setup
  5. ...

  6. start_of_setup:
  7. # 一大堆代码,看不懂
复制代码

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
23 [报告]
发表于 2016-04-01 13:18 |只看该作者
本帖最后由 _nosay 于 2016-04-06 17:16 编辑

bootsect.S、setup.S、head.S概要:
http://blog.csdn.net/xljiulong/article/details/7385842
http://www.xuebuyuan.com/zh-tw/1334790.html

SMP boot:
http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/smpboot.html

bootsect.S注释:
http://www.educity.cn/linux/1610794.html

setup.S注释:
http://blog.csdn.net/yuan1125/article/details/5580316

head.S分析:
《Linux内核源代码情景分析》

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
24 [报告]
发表于 2016-04-01 17:51 |只看该作者
回复 22# _nosay
bp这时候应该已经在保护模式下了吧(都已经是c代码了)

symbol赋值不是“局部”,是后面的覆盖前面的,只对应一个符号。

重复出现的label:对应多个(同名)符号,所以最后会有符号冲突。
as里面有局部符号(local symbol)的概念(可以重复出现),像常见的1f,2b就是这样的例子。

详情可以参考 info as Symbols


   

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
25 [报告]
发表于 2016-07-12 15:54 |只看该作者
BIOS/uboot(bootloader)
MBR(分区信息)->引导扇区(下一步"对象")
LILO/GRUB->setup
zImage/bzImage(kernel)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP