您尚未登录。

#1 RK3288/RK3399/RK1108 » Linux-debugfs 的动态调试 » 2022-01-22 23:34:08

cwd502
回复: 0

1. 内核开启
(1)内核配置
Kernel hacking  --->
    printk and dmesg options  --->
        [* ] Enable dynamic printk() support

2.驱动支持
以 pr_debug / pr_err / pr_warn / pr_info打印的消息
#if defined(CONFIG_DYNAMIC_DEBUG)
// dynamic_pr_debug() uses pr_fmt() internally so we don't need it here
#define pr_debug(fmt, ...) \
         dynamic_pr_debug(fmt, ##__VA_ARGS__)
#elif defined(DEBUG)
#define pr_debug(fmt, ...) \
        printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...) \
        no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif

3.挂载
mount -t debugfs none /sys/kernel/debug

4.先查看下
cat /sys/kernel/debug/dynamic_debug/control

5.确保printk的打印等级OK
ensure console loglevel value > 7:
cat /proc/sys/kernel/printk
8    4    1    7 //8 is ok
echo 8 > /proc/sys/kernel/printk

6. 使用
1) module
echo 'module xhci_hcd +p' > /sys/kernel/debug/dynamic_debug/control //enable
echo 'module xhci_hcd -p' > /sys/kernel/debug/dynamic_debug/control //disable
 other usb module: 
echo 'module phy +p' > /sys/kernel/debug/dynamic_debug/control
echo 'module udc_core +p' > /sys/kernel/debug/dynamic_debug/control
echo 'module snps_udc_core +p' > /sys/kernel/debug/dynamic_debug/control
echo 'module libcomposite +p' > /sys/kernel/debug/dynamic_debug/control

 2) file
echo 'file hub.c +p' > /sys/kernel/debug/dynamic_debug/control //enable
echo 'file hub.c -p' > /sys/kernel/debug/dynamic_debug/control //disable

3) function
echo 'func hub_event +p' > /sys/kernel/debug/dynamic_debug/control //enable
echo 'func hub_event -p' > /sys/kernel/debug/dynamic_debug/control //disable

#2 全志 SOC » Linux内核驱动各种debug汇总 » 2022-01-22 22:47:05

cwd502
回复: 0

1.printk
(1)printk打印等级类型如下:
  printk(KERN_DEBUG "hello"); //
   #define KERN_EMERG    KERN_SOH "0"    /* system is unusable */
    #define KERN_ALERT    KERN_SOH "1"    /* action must be taken immediately */
    #define KERN_CRIT    KERN_SOH "2"    /* critical conditions */
    #define KERN_ERR    KERN_SOH "3"    /* error conditions */
    #define KERN_WARNING    KERN_SOH "4"    /* warning conditions */
    #define KERN_NOTICE    KERN_SOH "5"    /* normal but significant condition */
    #define KERN_INFO    KERN_SOH "6"    /* informational */
    #define KERN_DEBUG    KERN_SOH "7"    /* debug-level messages */
(2)printk开启打印
使用:
cat /proc/sys/kernel/printk
7    4    1    7   4(新版Linux才有)
echo 8 > /proc/sys/kernel/printk //8 > KERN_DEBUG, so KERN_DEBUG will print
分析:
kernel/printk/prink.c有如下定义:
int console_printk[5] = {
    CONSOLE_LOGLEVEL_DEFAULT,    /*7,console_loglevel,         控制台输出,<7 的才输出 */
    MESSAGE_LOGLEVEL_DEFAULT,    /*6,default_message_loglevel, 即printk(“hell world”);优先级为4  */
    CONSOLE_LOGLEVEL_MIN,        /*1,minimum_console_loglevel, 最小支持的打印等级为1,0留给内核严重错误使用 */
    CONSOLE_LOGLEVEL_DEFAULT,    /*7,default_console_loglevel, 第一个默认的等级*/
    MESSAGE_LOGLEVEL_DEFAULT,    /*4,default_devkmsg_loglevel, 进入kmesg /dev/kmsg log的等级*/
};
(1)第一个参数7:表示小于7优先级消息才会被输出到控制台。
(2)第二个参数4 :表示默认的printk消息优先级别,即printk(“hell world”);优先级为4, 由于4<7,故可以被打印到控制台。
(3)第三个参数1 :表示可接收的最高优先级,当printk disable控制台输出时,设置第一个参数为1,但是,从内核等级来看,还有优先级0,这个是printk最高级优先级,一般用于内核严重消息打印。比如内存错误或者 watchdog reset.也可以设置第一个和第三个参数为0
(4)第四个参数7: 默认控制台优先级,即第一个参数的默认优先级。
(5)第五个参数4:执行dmesg(/dev/kmsg)输出log,该等级即是消息进入log的等级,<4 的消息都能在dmesg下找到。

2. dev_dbg、 pr_debug、dev_vdbg、dev_printk
dev_dbg定义:
#if defined(CONFIG_DYNAMIC_DEBUG) //如果定义动态调试,执行echo 'file hub.c +p' > /sys/kernel/debug/dynamic_debug/control 开启打印
#define dev_dbg(dev, format, ...)             \
do {                             \
    dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
} while (0)
#elif defined(DEBUG)  //定义了debug,则 dev_printk(KERN_DEBUG""), 执行 echo 8 > /proc/sys/kernel/printk 开启打印
#define dev_dbg(dev, format, arg...)        \
    dev_printk(KERN_DEBUG, dev, format, ##arg)
#else  //不打印
#define dev_dbg(dev, format, arg...)                \
({                                \
    if (0)                            \
        dev_printk(KERN_DEBUG, dev, format, ##arg);    \
})
#endif
pr_debug定义:
/* If you are writing a driver, please use dev_dbg instead */
#if defined(CONFIG_DYNAMIC_DEBUG)
#include <linux/dynamic_debug.h>

/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
#define pr_debug(fmt, ...) \
    dynamic_pr_debug(fmt, ##__VA_ARGS__) //动态调试
#elif defined(DEBUG)
#define pr_debug(fmt, ...) \
    printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) //正常打印
#else
#define pr_debug(fmt, ...) \
    no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) //不打印
#endif
dev_vdbg定义:
#ifdef VERBOSE_DEBUG //定义了这个才打印
#define dev_vdbg    dev_dbg
#else
#define dev_vdbg(dev, format, arg...)                \
({                                \
    if (0)                            \
        dev_printk(KERN_DEBUG, dev, format, ##arg);    \
})
#endif

dev_printk定义:
static void __dev_printk(const char *level, const struct device *dev,
            struct va_format *vaf)
{
    if (dev) //带个前缀
        dev_printk_emit(level[1] - '0', dev, "%s %s: %pV", dev_driver_string(dev), dev_name(dev), vaf);
    else
        printk("%s(NULL device *): %pV", level, vaf);
}
void dev_printk(const char *level, const struct device *dev,
        const char *fmt, ...)
{
    struct va_format vaf;
    va_list args;
    va_start(args, fmt);
    vaf.fmt = fmt;
    vaf.va = &args;
    __dev_printk(level, dev, &vaf);
    va_end(args);
}
EXPORT_SYMBOL(dev_printk);

#3 全志 SOC » Ubuntu空间不够怎么办?干它 » 2022-01-22 22:44:20

cwd502
回复: 1

1. 执行如下命令:
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn

如下:
windom@windom-vm:~$ dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn
312288    linux-firmware
284655    code
211714    fonts-noto-cjk-extra
193302    firefox
176986    thunderbird
168204    linux-modules-extra-5.0.0-32-generic
166567    openjdk-11-jre-headless
150201    libgl1-mesa-dri
132095    libreoffice-core
116361    mint-x-icons
112534    mint-y-icons
92831    texlive-lang-greek
91940    texlive-bibtex-extra
89836    fonts-noto-cjk
77300    libreoffice-common
68250    linux-headers-5.0.0-32
66019    linux-modules-5.0.0-32-generic
61388    libllvm8
57923    mint-backgrounds-tessa
55897    mint-backgrounds-tricia
51916    texlive-base
49042    texlive-latex-extra
48762    mint-backgrounds-tina
45284    libwebkit2gtk-4.0-37
45266    app-install-data

2. 找到大的包,卸载掉即可。

#4 全志 SOC » 通用makefile » 2022-01-22 22:38:57

cwd502
回复: 1

###################################################################
#   通用makefile
#   ChenWenDong
###################################################################
MINIGUI_DIR = /opt/z1/miniGUI_3.0.12/output
CROSS_DIR = /usr/local/arm_linux_4.2

CROSS        = arm-linux-
SRCDIRS        = ./camera ./hal ./app ./timer

ASFLAGS        =
CFLAGS        = -O2 -Wall
CXXFLAGS    =
LDFLAGS        =
ARFLAGS        =
OCFLAGS        =
ODFLAGS        =

INCDIRS        = -I$(MINIGUI_DIR)/include/freetype2 \
          -I$(MINIGUI_DIR)/include \
          -I$(CROSS_DIR)/arm-linux/include \
          -I$(CROSS_DIR)/arm-none-linux-gnueabi/include

LIBDIRS        = -L$(MINIGUI_DIR)/lib \
          -L$(CROSS_DIR)/arm-none-linux-gnueabi/lib

LIBS         = -lminigui_ths -lfreetype -ljpeg -lpng -ldl -lm -lpthread -muclibc

#
### You shouldn't need to change anything below this point.
#
##
#AS     = $(CROSS)as
CC     = $(CROSS)gcc
CXX     = $(CROSS)g++
LD     = $(CROSS)gcc
AR     = $(CROSS)ar
OC     = $(CROSS)objcopy
OD     = $(CROSS)objdump
RM     = -rm -fr

NAME     := z1 #$(notdir $(CURDIR))
SFILES     := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s))
CFILES     := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
CPPFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.cpp))
RMFILES     := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*~))
RMFILEO     := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.o))

OBJS      := $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
DEPS     := $(OBJS:.o=.d)
VPATH     := $(SRCDIRS)

.PHONY: all rebuild clean

all:
    @$(MAKE) $(NAME)

rebuild:
    @$(MAKE) clean
    @$(MAKE) $(NAME)

$(NAME):$(OBJS)
    @echo test linking ...
    $(LD) $(LDFLAGS) $(LIBDIRS) -o $@ $^ $(LIBS)

%.o:    %.s
    @echo assembling $< ...
    $(AS) $(ASFLAGS) $(INCDIRS) $< -o $@

%.o:    %.c
    @echo test compiling $< ...
    $(CC) $(CFLAGS) $(INCDIRS) -c $< -o $@
   
%.o:    %.cpp   
    @echo compiling $< ...
    $(CXX) $(CXXFLAGS) $(INCDIRS) -c $< -o $@
   
%.d:    %.c
    @$(CC) $(CFLAGS) $(INCDIRS) -MM $^ -o $@.tmp
    @sed 's,$(basename $(notdir $@)).o[ :]*,$(@:.d=.o) $@ : ,g' $@.tmp > $@
    @$(RM) $@.tmp
   
%.d:    %.cpp
    @$(CXX) $(CXXFLAGS) $(INCDIRS) -MM $^ -o $@.tmp
    @sed 's,$(basename $(notdir $@)).o[ :]*,$(@:.d=.o) $@ : ,g' $@.tmp > $@
    @$(RM) $@.tmp

ifeq (mach/mach,)
-include $(DEPS)
endif
   
clean:
    @$(RM) $(OBJS) $(DEPS) $(NAME) $(RMFILES) $(RMFILEO)
    @echo clean completed

#5 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 叱咤风云的ThreadX全家桶正式加入开源免费的大浪潮中 » 2022-01-22 22:34:09

cwd502
回复: 0

1、去年微软宣布收购ThreadX,但是没有公布后续策略,uCOS全家桶进入开源免费后,ThreadX也宣布正式加入。

2、微软未来四年将投资50亿美元到物联网上,收购ExpressLogic是该战略的一部分。

3、ThreadX的产品涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。

4、ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。

(1)医疗-FDA510(k),IEC-62304ClassC,IEC-60601,ISO-14971

(2)工业-UL-1998,IEC-61508SIL4

(3)运输/铁路-EN50128SIL4,BS50128,49CFR236,IEC-61508

(4)航空航天设备-DO-178B,ED-12B,DO-278

(5)汽车-IEC-61508ASILD

(6)核应用-IEC-61508

(7)家电-UL/IEC60730/60335

各种安全等级基本都达到了最高。

像工业级安全认证IEC61508,ThreadX满足最高等级SIL4,而SafeRTOS,embOS,uCOS-II都只是SIL3。

随着uCOS和ThreadX全家桶都开源,其它RTOS影响是巨大的,还没有开源的,可能也要加入开源大浪了。


1、全球使用Express Logic的ThreadX操作系统的电子设备已经有62亿,这个震撼的数值在持续增长中。


2、ThreadX和各种中间件:

AzureRTOSThreadX

AzureRTOSNetX

AzureRTOSNetXDuo

AzureRTOSFileX

AzureRTOSGUIX

AzureRTOSGUIXStudio

AzureRTOSUSBX

AzureRTOSTraceX


3、Github列表:


4、ThreadX授权方式问题。简单了解了一下,微软给出的厂家或者指定系列是免费的,但是看了下Github,当前还没有更新,应该近期会更新上:


5、教程文档:

https://docs.microsoft.com/en-us/azure/rtos/

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn