Install VMWare Player in Fedora

After

1
dnf install kernel-headers kernel-devel

we still failed building kernel modules for VMWare Player in fedora,

1
vm_basic_defs.h:54:12: fatal error: stddef.h: No such file or directory

A solution is

1
2
3
4
# e.g. current kernel version is 5.16.12-200.fc35.x86_64
cd /usr/src/kernel/5.16.12-200.fc35.x86_64/include
ln -s linux/stddef.h stddef.h
ln -s linux/stdarg.h stdarg.h

refer to:
https://stackoverflow.com/questions/54480765/how-can-i-solve-stdarg-h-no-such-file-or-directory-while-compiling-out-of-tree-l

Change grub2 default startup item in Fedora

Confirm our OS is in BIOS or EFI,

1
2
3
4
# in BIOS system
GRUB_CFG=/boot/grub2/grub.cfg
# in EFI system
GRUB_CFG=/boot/efi/EFI/fedora/grub.cfg

Then lookup the booting item id we want to set as default.

If we only want to switch default between Linux kernels,

1
grubby --info ALL

Else if we want to change default booting item to Windows,

1
cat $GRUB_CFG | grep Windows

Read the output, we will find the item, e.g. corresponding to the name, the id is "e528434f2b3e4d7c97d97aa4aabb976e-5.16.7", write it in /etc/default/grub

1
2
#GRUB_DEFAULT=saved
GRUB_DEFAULT=e528434f2b3e4d7c97d97aa4aabb976e-5.16.7

Finally update grub,

1
2
grub2-mkconfig -o $GRUB_CFG
#.

Reboot to see the change.

And in Ubuntu, how to make grub2 remember last choice?

sudo vi /etc/default/grub
	GRUB_DEFAULT=saved
	GRUB_SAVEDEFAULT=true
sudo update-grub

refer to:
https://docs.fedoraproject.org/en-US/fedora/f35/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader/

Fedora 21 改变启动顺序以及grub2 配置技巧


https://askubuntu.com/questions/148662/how-to-get-grub2-to-remember-last-choice

Directories in Win10

Not only one Startup directory,

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
C:\Users\euhat\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Themes downloaded from Windows Store,

C:\Users\euhat\AppData\Local\Microsoft\Windows\Themes

Linux subsystem Ubuntu,

C:\Users\euhat\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_xxxx\LocalState\rootfs

Need to clean,

C:\ProgramData\Package Cache
Control Panel\All Control Panel Items\Administrative Tools\Task Scheduler\Task Scheduler Library\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser

refer to:
https://blog.csdn.net/weixin_48160438/article/details/113413048

CreateTexture2D E_INVALIDARG

  1. Ensure "Graphics Tools" installed.

    Go to the Settings panel, under System, Apps & features, Manage optional Features, Add a feature, and then look for "Graphics Tools".

  2. Enable the debug layer by code,

    1
    2
    3
    4
    5
    6
    
    D3D11CreateDevice(
    	nullptr,
    	D3D_DRIVER_TYPE_HARDWARE,
    	nullptr,
    	XXX | D3D11_CREATE_DEVICE_DEBUG, // add here!
    	...);

    or in Visual Studio, on the main menu, choose Debug, Graphics, setup in DirectX Control Panel.

  3. Restart debug session. And after CreateTexture2D returns E_INVALIDARG, there will be debug informations in VS IDE Output Panel, each one of which begins with like "D3D11 ERROR".

refer to:
https://docs.microsoft.com/en-us/visualstudio/debugger/graphics/getting-started-with-visual-studio-graphics-diagnostics
https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-devices-layers
https://stackoverflow.com/questions/53569263/directx-11-id3ddevicecreatetexture2d-with-initial-data-fail
https://blog.rthand.com/capture-directx-10-11-debug-output-to-visual-studio/
https://article.itxueyuan.com/dwlpL
https://walbourn.github.io/

Spi protocol memo

drivers/spi/spi.c

1
2
3
4
5
6
7
8
9
spi_write_then_read
 __spi_sync
 
spi_transfer_one_message
 spi_set_cs
 stm32_spi_transfer_one
 
 rspi_dma_transfer
 rspi_pio_transfer

SPI: Serial Peripheral Interface
CS(SS): Chip Select
SCLK: Serial Clock
PTP: Precise Time Protocol

refer to:
https://blog.csdn.net/faihung/article/details/81839825

Minimize memory usage in win10

Remove all apps,

1
#Get-AppxPackage -AllUsers | Remove-AppxPackage

To restore,

dism.exe /online /cleanup-image /scanhealth
dism.exe /online /cleanup-image /restorehealth
dism.exe /online /cleanup-image /startcomponentcleanup
sfc /scannow
 
Get-AppXPackage WindowsStore -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

Strip off HyperV,

bcdedit /set hypervisorlaunchtype off

Disable realtime protection of Windows Defender, or completely shut it down,

gpedit.msc
	Computer Configuration
		Administrative Templates
			Windows Components
				Microsoft Defender Antivirus
					Turn off Microsoft Defender Antivirus
						Enabled

Turn off Windows Update, from https://blog.csdn.net/milaoshu1020/article/details/115062811

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
' switch_win_update_v3.vbs
Const usosvc_reg = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usosvc"
Set fso = createobject("scripting.filesystemobject")
Set shell = createobject("wscript.shell")
curdir = fso.getparentfoldername(wscript.scriptfullname)
 
If wscript.arguments.count = 0 Then
	Set sh = createobject("shell.application")
	sh.shellexecute wscript.fullname,"""" & wscript.scriptfullname & """ -admin",,"runas"
ElseIf wscript.arguments.count = 1 And wscript.arguments(0) = "-admin" Then
	run
Else
	msgbox "Argument error!"
End If
 
Sub Run()
	Do
		ret = inputbox("0: Turn off Win10 Update;" & vbcrlf & _
						"1: Turn on Win10 Update;" & vbcrlf & _
						vbcrlf & _
						"Input:", "Switch Win10 Update v3","0")
		Select Case ret
		Case "0"
			retnum = shell.run("sc.exe stop usosvc",0,True)
			shell.regwrite usosvc_reg & "\WOW64",&H14c,"REG_DWORD"
			msgbox "Turned Win10 Update off!",vbexclamation
			Exit Do
		Case "1"
			shell.regdelete usosvc_reg & "\WOW64"
			retnum = shell.run("sc.exe start usosvc",0,True)
			msgbox "Turned Win10 Update on!",vbexclamation
			Exit Do
		Case ""
			Exit Do
		Case Else
			msgbox "Input mismatch!",vbcritical
		End Select
	Loop
End Sub

After doing those things, in a machine with 8G memory and an SSD, we can play a 4G memory allocated Win10 LTSC 2019 vmware guest and a 2G ubuntu20 one in a silky manner.

refer to:
http://www.xitongcheng.com/jiaocheng/win10_article_42055.html
https://www.bilibili.com/read/cv4183745

Awtk memo

Download node-v16.14.0-x64.msi from
https://nodejs.org/en/
or for win7 is
https://nodejs.org/download/release/v13.6.0
install it in Adminstrator cmd console.

Official repository:
https://github.com/zlgopen/awtk

1
2
3
4
5
6
python -m pip install pywin32
python -m pip install scons
 
cd awtk-master
scons
bin\demoui

Debug after attach demoui.exe,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
awtk-master\demos\demo_ui_app.c
 application_init
  WIDGET_FOR_EACH_CHILD_BEGIN(window_manager(), root, i)
   init_children_widget(root, (void*)win)
    widget_foreach(widget, init_widget, ctx)
     widget_on(widget, EVT_CLICK, on_menu_bar_open, win)
      on_menu_bar_open
       open_menu_bar
 
label_paint_text
 widget_draw_text_in_rect
 
window_create
 edit_create
 button_create
 label_create
  widget_set_text
window_close
dialog_create_simple
 dialog_set_title

Ui and style,

1
2
3
4
5
6
7
8
9
#doc/theme.md
bin/themegen input.xml output.bin -
 
#doc/ui_desc.md
bin/preview_ui demos/assets/raw/ui/main.xml
bin/xml_to_ui window1.xml window1.data
#include "res/ui/window1.data"
assets_manager_add((const asset_info_t*)ui_window1);
widget_t* win = window_open(name);

Message box,

Read more

Disable features in cmake command line

Identical to "./configure --help", when a project uses cmake, we get building instructions like below,

1
2
3
4
mkdir bld
cd bld
cmake ..
cmake . -L

wait a while we will see all the variables cmake defined in cache.

Or directly look into CMakeCache.txt.

If we want to modify a variable to off, or say, disable some functionality,

1
FEATURE_test_name:BOOL=ON

we run cmake once again like this,

1
cmake -DFEATURE_test_name:BOOL=OFF ..

refer to:
https://www.oschina.net/question/231677_45266

Build qt source in Fedora35

Extract qt-everywhere-src-6.2.2.zip to directory named qt,

sudo dnf install libxcb libxcb-devel xcb-util xcb-util-devel xcb-util-*-devel libX11-devel libXrender-devel libxkbcommon-devel libxkbcommon-x11-devel libXi-devel libdrm-devel libXcursor-devel libXcomposite-devel

cd qt
mkdir bld
cd bld
cmake -G Ninja -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/installed -DCMAKE_BUILD_TYPE="Debug" ..
cmake --build . --parallel
cmake --install . --prefix=`pwd`/installed

Can't locate English.pm in @INC

sudo dnf install perl-English

This application failed to start because no Qt platform plugin could be init...

If "xcb" things missing, we should "dnf install libxcb..." like above, and an annoying step we can't image is after we install required packages, we must delete CMakeCache.txt first and then to invoke cmake, if not, some modules like xcb-sm are always displayed not to be built.

Feature accessibility_atspi_bridge is already defined to be "OFF" and should now be set to "ON" when importing features from Qt6::Gui.

We only need to not let the message interrupt building progress,

/mnt/SDC2/qt/bld/installed/lib/cmake/Qt6/QtFeature.cmake:1136

	message(STATUS "Feature ${feature} is already defined to be \"${QT_FEATURE_${feature}}\" and should now be set to \"${value}\" when importing features from ${target}.")

refer to:
https://download.qt.io/official_releases/qtcreator/6.0/6.0.1/qt-creator-opensource-linux-x86_64-6.0.1.run
https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11
https://forum.qt.io/topic/121386/built-qt6-from-sources-problem-with-xcb-plugin/15
https://forum.qt.io/topic/128887/build-qt6-from-source-xcb-issue/3
https://forum.qt.io/topic/92834/configure-errors-disabling-x11-accessibility-bridge-d-bus-or-at-spi-is-missing/7

Debug ue4 in Fedora35

After running Setup.sh and GenerateProjectFiles.sh, we found UE4.pro created. It's like a fresh breeze coming from the roof window, we are free now, no more need to fear the once unbearable torment in Visual Studio IDE.

Qt source is not necessary to ue4, qtcreator is only a visual debugger to ue4.

Build Steps:

1
make UE4Editor-Linux-Debug ShaderCompileWorker-Linux-Debug -j8

Clean Steps:

1
make UE4Editor-Linux-Debug ShaderCompileWorker-Linux-Debug ARGS=-clean -j8

refer to:
https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Linux/BeginnerLinuxDeveloper/SettingUpQtCreator/