页次: 1
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
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);
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. 找到大的包,卸载掉即可。
###################################################################
# 通用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
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、教程文档:
页次: 1