• ccs debug kernel


    ccs kernel debug

    Some time, we need to debug kernel for locate key message. So need to single step to debug kernel code. Below method that provided you to debug kernel code.

    1 understand below file

    1. system.map
    2. vmlinux

    2 Kernel ccs debug step:

    1. Congigure CONFIG_DEBUG_INFO=y, once you configure the info, you need to check the .config file.
    		diff --git a/ti_config_fragments/boot_opt.cfg b/ti_config_fragments/boot_opt.cfg
    		index 02b3c6b..693eaea 100644
    		--- a/ti_config_fragments/boot_opt.cfg
    		+++ b/ti_config_fragments/boot_opt.cfg
    		@@ -53,7 +53,7 @@ CONFIG_DEBUG_FS=n
    		 CONFIG_KPROBES=n
    		 
    		 # Remove debug info from kernel to reduce size
    		-CONFIG_DEBUG_INFO=n
    		+CONFIG_DEBUG_INFO=y
    		 
    		 # Change kernel compression to LZO which has faster decompression
    		 # times compared to gzip.
    
    1. Make file add configure for debug:ccflags-y := -DDEBUG -O0
    2. Debug single file:CFLAGS_omap_hwmod.o += -O0
    3. load symbol: vmlinux

    3 example

    	diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
    	index 3466e05..6c48b8c0 100644
    	--- a/arch/arm/mach-omap2/Makefile
    	+++ b/arch/arm/mach-omap2/Makefile
    	@@ -10,6 +10,8 @@ obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o timer.o pm.o 
    	         common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o 
    	         omap_device.o sram.o drm.o
    	 
    	+CFLAGS_omap_hwmod.o += -O0
    	+CFLAGS_io.o += -O0
    	 hwmod-common                           = omap_hwmod.o omap_hwmod_reset.o 
    	                                          omap_hwmod_common_data.o
    	 clock-common                           = clock.o
    	diff --git a/arch/arm/mach-omap2/clockdomains7xx_data.c b/arch/arm/mach-omap2/clockdomains7xx_data.c
    	index dd37efa..8f0252c 100644
    	--- a/arch/arm/mach-omap2/clockdomains7xx_data.c
    	+++ b/arch/arm/mach-omap2/clockdomains7xx_data.c
    	@@ -352,7 +352,7 @@ static struct clockdomain iva_7xx_clkdm = {
    	        .dep_bit          = DRA7XX_IVA_STATDEP_SHIFT,
    	        .wkdep_srcs       = iva_wkup_sleep_deps,
    	        .sleepdep_srcs    = iva_wkup_sleep_deps,
    	-       .flags            = CLKDM_CAN_HWSUP_SWSUP,
    	+       .flags            = CLKDM_CAN_FORCE_WAKEUP,
    	 };
    	 
    	 static struct clockdomain coreaon_7xx_clkdm = {
    	@@ -736,5 +736,6 @@ void __init dra7xx_clockdomains_init(void)
    	 {
    	        clkdm_register_platform_funcs(&omap4_clkdm_operations);
    	        clkdm_register_clkdms(clockdomains_dra7xx);
    	+       printk(KERN_DEBUG ">>>>> fredy; clkdoms register 
    ");
    	        clkdm_complete_init();
    	 }
    	diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
    	index 24e05ad..bf578ea 100644
    	--- a/arch/arm/mach-omap2/omap_hwmod.c
    	+++ b/arch/arm/mach-omap2/omap_hwmod.c
    	@@ -3346,6 +3346,10 @@ struct omap_hwmod *omap_hwmod_lookup(const char *name)
    	  * caller of omap_hwmod_for_each().  @fn is called with
    	  * omap_hwmod_for_each() held.
    	  */
    	+char nameoftempoh[20][20];
    	+int idxtempoh =0;
    	+int actualidx=0;
    	+
    	 int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
    	                        void *data)
    	 {
    	@@ -3356,7 +3360,11 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
    	                return -EINVAL;
    	 
    	        list_for_each_entry(temp_oh, &omap_hwmod_list, node) {
    	+               strcpy(nameoftempoh[idxtempoh],temp_oh->name);
    	                ret = (*fn)(temp_oh, data);
    	+               idxtempoh=(idxtempoh+1)%20;
    	+               actualidx++;
    	+
    	                if (ret)
    	                        break;
    	        }
    	@@ -3471,8 +3479,13 @@ static int __init omap_hwmod_setup_all(void)
    	        omaphwmod_dur = read_fast_counter();
    	        omap_hwmod_build_ti_hwmod_list();
    	        _ensure_mpu_hwmod_is_setup(NULL);
    	+       idxtempoh=0;
    	+    actualidx=0;
    	 
    	        omap_hwmod_for_each(_init, NULL);
    	+       idxtempoh=0;
    	+    actualidx=0;
    	+
    	        omap_hwmod_for_each(_setup, NULL);
    	        omaphwmod_dur = read_fast_counter() - omaphwmod_dur;
    	 
    	diff --git a/arch/arm/mach-omap2/powerdomains7xx_data.c b/arch/arm/mach-omap2/powerdomains7xx_data.c
    	index 7fb8714..4d630f9 100644
    	--- a/arch/arm/mach-omap2/powerdomains7xx_data.c
    	+++ b/arch/arm/mach-omap2/powerdomains7xx_data.c
    	@@ -36,7 +36,7 @@ static struct powerdomain iva_7xx_pwrdm = {
    	        .name             = "iva_pwrdm",
    	        .prcm_offs        = DRA7XX_PRM_IVA_INST,
    	        .prcm_partition   = DRA7XX_PRM_PARTITION,
    	-       .pwrsts           = PWRSTS_OFF_ON,
    	+       .pwrsts           = PWRSTS_ON,
    	        .banks            = 4,
    	        .pwrsts_mem_on  = {
    	                [0] = PWRSTS_ON,        /* hwa_mem */
    	@@ -394,7 +394,7 @@ void __init dra7xx_powerdomains_init(void)
    	 {
    	        pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
    	        pwrdm_register_pwrdms(powerdomains_dra7xx);
    	-
    	+       printk(KERN_DEBUG ">>>>> fredy; pwrdoms register 
    ");
    	        if (soc_is_dra76x())
    	                pwrdm_register_pwrdms(powerdomains_dra76x);
    	        else if (soc_is_dra74x())
    	diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
    	index af9e9af..9524d76 100644
    	--- a/drivers/clk/Makefile
    	+++ b/drivers/clk/Makefile
    	@@ -14,7 +14,7 @@ obj-$(CONFIG_COMMON_CLK)      += clk-gpio.o
    	 ifeq ($(CONFIG_OF), y)
    	 obj-$(CONFIG_COMMON_CLK)       += clk-conf.o
    	 endif
    	-
    	+ccflags-y := -DDEBUG -O0
    	 # hardware specific clock types
    	 # please keep this section sorted lexicographically by file/directory path name
    	 obj-$(CONFIG_MACH_ASM9260)             += clk-asm9260.o
    	diff --git a/init/Makefile b/init/Makefile
    	index 7bc47ee..564e6e1 100644
    	--- a/init/Makefile
    	+++ b/init/Makefile
    	@@ -1,7 +1,6 @@
    	 #
    	 # Makefile for the linux kernel.
    	 #
    	-
    	 obj-y                          := main.o version.o mounts.o
    	 ifneq ($(CONFIG_BLK_DEV_INITRD),y)
    	 obj-y                          += noinitramfs.o
    	@@ -13,7 +12,7 @@ obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o
    	 ifneq ($(CONFIG_ARCH_INIT_TASK),y)
    	 obj-y                          += init_task.o
    	 endif
    	-
    	+ccflags-y := -DDEBUG -O0
    	 mounts-y                       := do_mounts.o
    	 mounts-$(CONFIG_BLK_DEV_RAM)   += do_mounts_rd.o
    	 mounts-$(CONFIG_BLK_DEV_INITRD)        += do_mounts_initrd.o
    	diff --git a/init/main.c b/init/main.c
    	index 649c622..1dd93ed 100644
    	--- a/init/main.c
    	+++ b/init/main.c
    	@@ -503,7 +503,7 @@ static void __init mm_init(void)
    	        ioremap_huge_init();
    	        mm_init_dur = read_fast_counter() - mm_init_dur;
    	 }
    	-
    	+volatile int done=1;
    	 asmlinkage __visible void __init start_kernel(void)
    	 {
    	        char *command_line;
    	@@ -511,6 +511,10 @@ asmlinkage __visible void __init start_kernel(void)
    	        u32 start_time_pmu;
    	        u32 setup_arch_time_pmu;
    	        u32 setup_arch_time_32k;
    	+       while (done==1)
    	+       {
    	+                asm("NOP");
    	+       }
    	 
    	        start_time_pmu = ARM_CCNT_Read();
    	 
    	@@ -723,7 +727,7 @@ static void __init do_ctors(void)
    	 #endif
    	 }
    	 
    	-bool initcall_debug;
    	+bool initcall_debug = 1;
    	 core_param(initcall_debug, initcall_debug, bool, 0644);
    	 
    	 #ifdef CONFIG_KALLSYMS
    	@@ -777,10 +781,14 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn)
    	        return false;
    	 }
    	 #else
    	+static char blacklist_buf[128] = "";
    	+
    	 static int __init initcall_blacklist(char *str)
    	 {
    	-       pr_warn("initcall_blacklist requires CONFIG_KALLSYMS
    ");
    	+       snprintf(blacklist_buf, 127, "%s", str);
    	+       pr_debug("blacklisted initcall %s
    ", blacklist_buf);
    	        return 0;
    	+
    	 }
    	 
    	 static bool __init_or_module initcall_blacklisted(initcall_t fn)
    	@@ -796,13 +804,13 @@ static int __init_or_module do_one_initcall_debug(initcall_t fn)
    	        unsigned long long duration;
    	        int ret;
    	 
    	-       printk(KERN_DEBUG "calling  %pF @ %i
    ", fn, task_pid_nr(current));
    	+       printk(KERN_INFO "calling  %pF @ %i
    ", fn, task_pid_nr(current));
    	        calltime = ktime_get();
    	        ret = fn();
    	        rettime = ktime_get();
    	        delta = ktime_sub(rettime, calltime);
    	        duration = (unsigned long long) ktime_to_ns(delta) >> 10;
    	-       printk(KERN_DEBUG "initcall %pF returned %d after %lld usecs
    ",
    	+       printk(KERN_INFO "initcall %pF returned %d after %lld usecs
    ",
    	                 fn, ret, duration);
    	 
    	        return ret;
    	@@ -813,7 +821,13 @@ int __init_or_module do_one_initcall(initcall_t fn)
    	        int count = preempt_count();
    	        int ret;
    	        char msgbuf[64];
    	+       char fn_name[128] = "";
    	 
    	+       snprintf(fn_name, 127, "%pf", fn);
    	+       if (!strcmp(fn_name, blacklist_buf)) {
    	+               pr_debug("function %pf returning without executing
    ", fn);
    	+               return -EPERM;
    	+       }
    	        if (initcall_blacklisted(fn))
    	                return -EPERM;
    	 
    	diff --git a/ti_config_fragments/boot_opt.cfg b/ti_config_fragments/boot_opt.cfg
    	index 02b3c6b..693eaea 100644
    	--- a/ti_config_fragments/boot_opt.cfg
    	+++ b/ti_config_fragments/boot_opt.cfg
    	@@ -53,7 +53,7 @@ CONFIG_DEBUG_FS=n
    	 CONFIG_KPROBES=n
    	 
    	 # Remove debug info from kernel to reduce size
    	-CONFIG_DEBUG_INFO=n
    	+CONFIG_DEBUG_INFO=y
    	 
    	 # Change kernel compression to LZO which has faster decompression
    	 # times compared to gzip.
    
  • 相关阅读:
    数和量的认识
    判断Exe(DLL)和符号文件是否匹配---验证模块和符号文件是否匹配的工具和方法
    CPU怎么计算1+1----CPU计算的电路基础
    java8-StreamAPI之collection归约操作
    java8-Stream流API
    java8-从Lamda到方法引用和构造引用
    java8-详解Lamda表达式
    Java8-Lamda和Stream原理引入
    jdk13-新特性预览
    mybatis配置
  • 原文地址:https://www.cnblogs.com/widic/p/10942438.html
Copyright © 2020-2023  润新知