新路程------hi3516a的reboot过程
来源:互联网 发布:网络摄像机球机 编辑:程序博客网 时间:2024/05/22 16:51
最近做watchdog,发现系统没有reboot成功,于是追一下正常的reboot是怎么做的
void hi3516a_restart(char mode, const char *cmd){__raw_writel(~0, IO_ADDRESS(SYS_CTRL_BASE) + REG_SC_SYSRES);}/*****************************************************************************/extern struct sys_timer hi3516a_sys_timer;MACHINE_START(HI3516A, "hi3516a").atag_offset= 0x100,.map_io= hi3516a_map_io,.init_early= hi3516a_init_early,.init_irq= hi3516a_gic_init_irq,.handle_irq= gic_handle_irq,.timer= &hi3516a_sys_timer,.init_machine= hi3516a_init,.reserve= hi3516a_reserve,.restart= hi3516a_restart,MACHINE_END
然后是
arch/arm/setup.c
void __init setup_arch(char **cmdline_p){struct machine_desc *mdesc;setup_processor();mdesc = setup_machine_fdt(__atags_pointer);if (!mdesc)mdesc = setup_machine_tags(machine_arch_type);machine_desc = mdesc;machine_name = mdesc->name;#ifdef CONFIG_ZONE_DMAif (mdesc->dma_zone_size) {extern unsigned long arm_dma_zone_size;arm_dma_zone_size = mdesc->dma_zone_size;}#endifif (mdesc->restart_mode)reboot_setup(&mdesc->restart_mode);init_mm.start_code = (unsigned long) _text;init_mm.end_code = (unsigned long) _etext;init_mm.end_data = (unsigned long) _edata;init_mm.brk = (unsigned long) _end;/* populate cmd_line too for later use, preserving boot_command_line */strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);*cmdline_p = cmd_line;parse_early_param();sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);sanity_check_meminfo();arm_memblock_init(&meminfo, mdesc);paging_init(mdesc);request_standard_resources(mdesc);if (mdesc->restart)arm_pm_restart = mdesc->restart; //hereunflatten_device_tree();#ifdef CONFIG_SMPif (is_smp())smp_init_cpus();#endifreserve_crashkernel();tcm_init();#ifdef CONFIG_MULTI_IRQ_HANDLERhandle_arch_irq = mdesc->handle_irq;#endif#ifdef CONFIG_VT#if defined(CONFIG_VGA_CONSOLE)conswitchp = &vga_con;#elif defined(CONFIG_DUMMY_CONSOLE)conswitchp = &dummy_con;#endif#endifif (mdesc->init_early)mdesc->init_early();}
最后是
arch/arm/kernel/process.c
void machine_restart(char *cmd){printk("matt-process.c\n");machine_shutdown();/* Flush the console to make sure all the relevant messages make it * out to the console drivers */arm_machine_flush_console();arm_pm_restart(reboot_mode, cmd); //this/* Give a grace period for failure to restart of 1s */mdelay(1000);/* Whoops - the platform was unable to reboot. Tell the user! */printk("Reboot failed -- System halted\n");local_irq_disable();while (1);}
阅读全文
0 0
- 新路程------hi3516a的reboot过程
- 新路程------hi3516a的i2c_read调用过程
- 新路程------imx6q的reboot过程
- 新路程-----hi3516a遇到的编译警告
- 新路程------hi3516a watchdog
- 新路程------hi3516a kernel启动
- 新路程------hi3516a phy初始化
- 新路程------hi3516a开启uart2
- 新路程------hi3516a uart1 rs485
- 新路程------adv7180寄存器的理解,hi3516a的sdio0检测
- 新路程------hi3516a修改register的应用层做法
- 新路程------hi3516a 在应用层对寄存器的操作
- 新路程------hi3516a的uart rts cts功能
- 新路程----hi3516a i2c驱动 kernel panic
- 新路程------hi3516a i2c设备reset
- 新路程------hi3516a vi_dump以及vio失败
- 新路程------hi3516a 内置rtc调试
- 新路程------sil9135 hi3516a gpio功能确认
- Nifi Docker集群-两个节点 (1)
- 断点下载
- Named Color
- 使用jqGrid中遇到的小问题
- 聚能聊 | 个人设备上如何搭建数据库服务才最快
- 新路程------hi3516a的reboot过程
- android aar 使用
- spring aop报错
- codeforces 862E Mahmoud and Ehab and the function 二分+思维
- Android中使用AIDL时的跨进程回调—Server回调Client
- 友元函数、友元类
- Tensor数据相关的运算、函数讲解及与numpy区别
- css选择器优先级
- ACM-ICPC北京站网络赛A题---Visiting Peking University