您尚未登录。

#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

  1. 使用
    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下找到。

  1. 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

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

#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


东莞哇酷科技有限公司开发