ioactive / platbox Goto Github PK
View Code? Open in Web Editor NEWUEFI and SMM Assessment Tool
License: MIT License
UEFI and SMM Assessment Tool
License: MIT License
Similar to how inteltool --mchbar
works in Linux, the issue is that I don't know if there's an easy way to determine the size of the MCHBAR (it's usually 0x6000 or 0x8000) and the fact that when you try reading from the invalid offsets of physical memory, the system goes into a full freeze, no bugchecks caused.
Tools like AIDA64 and HWinfo64 do it just fine, so there must be a way.
Hello,
On my Ryzen 9 7945HX, the chipset
command does not work properly. I will provide the log with debug messages enabled:
>>> debug
-> Debug: enabled
>>> chipset
Detected chipset:
=> Family: 19
=> Model: 61
-> One dword read from 00:14:03 offset 00000000h: 790e1022h
-> One dword read from 00:14:03 offset 00000004h: 0220000fh
-> One dword read from 00:14:03 offset 00000008h: 06010051h
-> One dword read from 00:14:03 offset 0000000ch: 00800000h
-> One dword read from 00:14:03 offset 00000010h: 00000000h
-> One dword read from 00:14:03 offset 00000014h: 00000000h
-> One dword read from 00:14:03 offset 00000018h: 00000000h
-> One dword read from 00:14:03 offset 0000001ch: 00000000h
-> One dword read from 00:14:03 offset 00000020h: 00000000h
-> One dword read from 00:14:03 offset 00000024h: 00000000h
-> One dword read from 00:14:03 offset 00000028h: 00000000h
-> One dword read from 00:14:03 offset 0000002ch: 14331043h
-> One dword read from 00:14:03 offset 00000030h: 00000000h
-> One dword read from 00:14:03 offset 00000034h: 00000000h
-> One dword read from 00:14:03 offset 00000038h: 00000000h
-> One dword read from 00:14:03 offset 0000003ch: 00000000h
-> One dword read from 00:14:03 offset 00000040h: 0000001ch
-> One dword read from 00:14:03 offset 00000044h: ffffffffh
-> One dword read from 00:14:03 offset 00000048h: ffffffffh
-> One dword read from 00:14:03 offset 0000004ch: ffffffffh
-> One dword read from 00:14:03 offset 00000050h: ffffffffh
-> One dword read from 00:14:03 offset 00000054h: ffffffffh
-> One dword read from 00:14:03 offset 00000058h: ffffffffh
-> One dword read from 00:14:03 offset 0000005ch: ffffffffh
-> One dword read from 00:14:03 offset 00000060h: ffffffffh
-> One dword read from 00:14:03 offset 00000064h: ffffffffh
-> One dword read from 00:14:03 offset 00000068h: ffffffffh
-> One dword read from 00:14:03 offset 0000006ch: ffffffffh
-> One dword read from 00:14:03 offset 00000070h: ffffffffh
-> One dword read from 00:14:03 offset 00000074h: ffffffffh
-> One dword read from 00:14:03 offset 00000078h: ffffffffh
-> One dword read from 00:14:03 offset 0000007ch: ffffffffh
-> One dword read from 00:14:03 offset 00000080h: ffffffffh
-> One dword read from 00:14:03 offset 00000084h: ffffffffh
-> One dword read from 00:14:03 offset 00000088h: ffffffffh
-> One dword read from 00:14:03 offset 0000008ch: ffffffffh
-> One dword read from 00:14:03 offset 00000090h: ffffffffh
-> One dword read from 00:14:03 offset 00000094h: ffffffffh
-> One dword read from 00:14:03 offset 00000098h: ffffffffh
-> One dword read from 00:14:03 offset 0000009ch: ffffffffh
-> One dword read from 00:14:03 offset 000000a0h: ffffffffh
-> One dword read from 00:14:03 offset 000000a4h: ffffffffh
-> One dword read from 00:14:03 offset 000000a8h: ffffffffh
-> One dword read from 00:14:03 offset 000000ach: ffffffffh
-> One dword read from 00:14:03 offset 000000b0h: ffffffffh
-> One dword read from 00:14:03 offset 000000b4h: ffffffffh
-> One dword read from 00:14:03 offset 000000b8h: ffffffffh
-> One dword read from 00:14:03 offset 000000bch: ffffffffh
-> One dword read from 00:14:03 offset 000000c0h: ffffffffh
-> One dword read from 00:14:03 offset 000000c4h: ffffffffh
-> MSR:[c0010058]: 00000000F000001D
-> 000000c4 bytes read from physical Memory 00000000FFFFFFC0
-> Successfully mapped physaddr ffffffc0 to 0000022684860FC0
Is this suppose to work on Linux. My attempts to get it running are met with
"install_driver Unimplemented!" and
"start_service Unimplemented!"
I cloned the repo and did ./build.sh in the main directory. I cded to Platbox/compiled
and tried to get both the paltboc_cli and the example to work but were meant with the unimplemented errors.
I wanted to make sure I wasn't doing something wrong before looking at writing the linux support.
Hi all,
I wondered if any of these tests would be appropriate for HSI? e.g. https://fwupd.github.io/libfwupdplugin/hsi.html -- any feedback most welcome. Thanks!
Hello. I cannot compile the kernetix driver on Linux:
[moldimolt@localhost-live driver]$ make
make -C /lib/modules/6.4.15-200.fc38.x86_64/build M=/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver clean
make -C /lib/modules/6.4.15-200.fc38.x86_64/build M=/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver modules
CC [M] /home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.o
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c: In function ‘device_mmap’:
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:64:23: error: assignment of read-only member ‘vm_flags’
64 | vma->vm_flags |= VM_IO;
| ^~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:65:19: error: assignment of read-only member ‘vm_flags’
65 | vma->vm_flags |= (VM_DONTEXPAND | VM_DONTDUMP);
| ^~
In file included from ./include/linux/kernel.h:30,
from ./arch/x86/include/asm/percpu.h:27,
from ./arch/x86/include/asm/nospec-branch.h:14,
from ./arch/x86/include/asm/paravirt_types.h:27,
from ./arch/x86/include/asm/ptrace.h:97,
from ./arch/x86/include/asm/math_emu.h:5,
from ./arch/x86/include/asm/processor.h:13,
from ./arch/x86/include/asm/timex.h:5,
from ./include/linux/timex.h:67,
from ./include/linux/time32.h:13,
from ./include/linux/time.h:60,
from ./include/linux/stat.h:19,
from ./include/linux/module.h:13,
from /home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:6:
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c: In function ‘kernetix_ioctl’:
./include/linux/kern_levels.h:5:25: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
./include/linux/printk.h:427:25: note: in definition of macro ‘printk_index_wrap’
427 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:90:9: note: in expansion of macro ‘printk’
90 | printk(KERN_ALERT "The IOCTL for ABW %#08x was called :)\n", KERNETIX_ABW);
| ^~~~~~
./include/linux/kern_levels.h:9:25: note: in expansion of macro ‘KERN_SOH’
9 | #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:90:16: note: in expansion of macro ‘KERN_ALERT’
90 | printk(KERN_ALERT "The IOCTL for ABW %#08x was called :)\n", KERNETIX_ABW);
| ^~~~~~~~~~
./include/linux/kern_levels.h:5:25: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
./include/linux/printk.h:427:25: note: in definition of macro ‘printk_index_wrap’
427 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:120:9: note: in expansion of macro ‘printk’
120 | printk(KERN_ALERT "The IOCTL for ABR %#08x was called :)\n", KERNETIX_ABR);
| ^~~~~~
./include/linux/kern_levels.h:9:25: note: in expansion of macro ‘KERN_SOH’
9 | #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:120:16: note: in expansion of macro ‘KERN_ALERT’
120 | printk(KERN_ALERT "The IOCTL for ABR %#08x was called :)\n", KERNETIX_ABR);
| ^~~~~~~~~~
./include/linux/kern_levels.h:5:25: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘void *’ [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
./include/linux/printk.h:427:25: note: in definition of macro ‘printk_index_wrap’
427 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:126:9: note: in expansion of macro ‘printk’
126 | printk(KERN_ALERT "Value of %016lx --> %016lx\n",
| ^~~~~~
./include/linux/kern_levels.h:9:25: note: in expansion of macro ‘KERN_SOH’
9 | #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:126:16: note: in expansion of macro ‘KERN_ALERT’
126 | printk(KERN_ALERT "Value of %016lx --> %016lx\n",
| ^~~~~~~~~~
./include/linux/kern_levels.h:5:25: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘void *’ [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
./include/linux/printk.h:427:25: note: in definition of macro ‘printk_index_wrap’
427 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:126:9: note: in expansion of macro ‘printk’
126 | printk(KERN_ALERT "Value of %016lx --> %016lx\n",
| ^~~~~~
./include/linux/kern_levels.h:9:25: note: in expansion of macro ‘KERN_SOH’
9 | #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:126:16: note: in expansion of macro ‘KERN_ALERT’
126 | printk(KERN_ALERT "Value of %016lx --> %016lx\n",
| ^~~~~~~~~~
./include/linux/kern_levels.h:5:25: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
./include/linux/printk.h:427:25: note: in definition of macro ‘printk_index_wrap’
427 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:136:9: note: in expansion of macro ‘printk’
136 | printk(KERN_ALERT "The IOCTL for CR3 %#08x was called :)\n", KERNETIX_CR3);
| ^~~~~~
./include/linux/kern_levels.h:9:25: note: in expansion of macro ‘KERN_SOH’
9 | #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:136:16: note: in expansion of macro ‘KERN_ALERT’
136 | printk(KERN_ALERT "The IOCTL for CR3 %#08x was called :)\n", KERNETIX_CR3);
| ^~~~~~~~~~
./include/linux/kern_levels.h:5:25: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
./include/linux/printk.h:427:25: note: in definition of macro ‘printk_index_wrap’
427 | _p_func(_fmt, ##__VA_ARGS__); \
| ^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:145:9: note: in expansion of macro ‘printk’
145 | printk(KERN_ALERT "Value of CR3 (Physical Address) --> %p\n", _cr3);
| ^~~~~~
./include/linux/kern_levels.h:9:25: note: in expansion of macro ‘KERN_SOH’
9 | #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:145:16: note: in expansion of macro ‘KERN_ALERT’
145 | printk(KERN_ALERT "Value of CR3 (Physical Address) --> %p\n", _cr3);
| ^~~~~~~~~~
In file included from ./include/linux/uaccess.h:11,
from ./include/linux/sched/task.h:11,
from ./include/linux/sched/signal.h:9,
from ./include/linux/rcuwait.h:6,
from ./include/linux/percpu-rwsem.h:7,
from ./include/linux/fs.h:33,
from /home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:9:
./arch/x86/include/asm/uaccess.h:175:34: warning: initialization of ‘long unsigned int *’ from ‘long unsigned int’ makes pointer from integer without a cast [-Wint-conversion]
175 | __typeof__(*(ptr)) __x = (x); /* eval x once */ \
| ^
./arch/x86/include/asm/uaccess.h:208:44: note: in expansion of macro ‘do_put_user_call’
208 | #define put_user(x, ptr) ({ might_fault(); do_put_user_call(put_user,x,ptr); })
| ^~~~~~~~~~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:146:13: note: in expansion of macro ‘put_user’
146 | put_user( _cr3, (unsigned long **)p );
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:174:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
174 | __u64 val = 0;
| ^~~~~
./arch/x86/include/asm/uaccess.h:175:34: warning: initialization of ‘long unsigned int *’ from ‘__u64’ {aka ‘long long unsigned int’} makes pointer from integer without a cast [-Wint-conversion]
175 | __typeof__(*(ptr)) __x = (x); /* eval x once */ \
| ^
./arch/x86/include/asm/uaccess.h:208:44: note: in expansion of macro ‘do_put_user_call’
208 | #define put_user(x, ptr) ({ might_fault(); do_put_user_call(put_user,x,ptr); })
| ^~~~~~~~~~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:176:9: note: in expansion of macro ‘put_user’
176 | put_user( val, (unsigned long **)msr_call->result );
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:210:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
210 | UINT32 bus = pci_call->bus;
| ^~~~~~
./arch/x86/include/asm/uaccess.h:175:34: warning: initialization of ‘long unsigned int *’ from ‘BYTE’ {aka ‘unsigned char’} makes pointer from integer without a cast [-Wint-conversion]
175 | __typeof__(*(ptr)) __x = (x); /* eval x once */ \
| ^
./arch/x86/include/asm/uaccess.h:208:44: note: in expansion of macro ‘do_put_user_call’
208 | #define put_user(x, ptr) ({ might_fault(); do_put_user_call(put_user,x,ptr); })
| ^~~~~~~~~~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:219:9: note: in expansion of macro ‘put_user’
219 | put_user( val, (unsigned long **)pci_call->result );
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:234:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
234 | UINT32 bus = pci_call->bus;
| ^~~~~~
./arch/x86/include/asm/uaccess.h:175:34: warning: initialization of ‘long unsigned int *’ from ‘WORD’ {aka ‘short unsigned int’} makes pointer from integer without a cast [-Wint-conversion]
175 | __typeof__(*(ptr)) __x = (x); /* eval x once */ \
| ^
./arch/x86/include/asm/uaccess.h:208:44: note: in expansion of macro ‘do_put_user_call’
208 | #define put_user(x, ptr) ({ might_fault(); do_put_user_call(put_user,x,ptr); })
| ^~~~~~~~~~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:243:9: note: in expansion of macro ‘put_user’
243 | put_user( val, (unsigned long **)pci_call->result );
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:258:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
258 | UINT32 bus = pci_call->bus;
| ^~~~~~
./arch/x86/include/asm/uaccess.h:175:34: warning: initialization of ‘long unsigned int *’ from ‘DWORD’ {aka ‘unsigned int’} makes pointer from integer without a cast [-Wint-conversion]
175 | __typeof__(*(ptr)) __x = (x); /* eval x once */ \
| ^
./arch/x86/include/asm/uaccess.h:208:44: note: in expansion of macro ‘do_put_user_call’
208 | #define put_user(x, ptr) ({ might_fault(); do_put_user_call(put_user,x,ptr); })
| ^~~~~~~~~~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:267:9: note: in expansion of macro ‘put_user’
267 | put_user( val, (unsigned long **)pci_call->result );
| ^~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:282:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
282 | UINT32 bus = pci_call->bus;
| ^~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:303:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
303 | UINT32 bus = pci_call->bus;
| ^~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:324:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
324 | UINT32 bus = pci_call->bus;
| ^~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:345:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
345 | UINT32 bus = pci_call->bus;
| ^~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:370:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
370 | UINT32 bus = pci_call->bus;
| ^~~~~~
./arch/x86/include/asm/uaccess.h:175:34: warning: initialization of ‘long unsigned int *’ from ‘UINT64’ {aka ‘long long unsigned int’} makes pointer from integer without a cast [-Wint-conversion]
175 | __typeof__(*(ptr)) __x = (x); /* eval x once */ \
| ^
./arch/x86/include/asm/uaccess.h:208:44: note: in expansion of macro ‘do_put_user_call’
208 | #define put_user(x, ptr) ({ might_fault(); do_put_user_call(put_user,x,ptr); })
| ^~~~~~~~~~~~~~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:379:9: note: in expansion of macro ‘put_user’
379 | put_user( bar_size, (unsigned long **)pci_call->result );
| ^~~~~~~~
In file included from ./include/linux/linkage.h:7,
from ./arch/x86/include/asm/cache.h:5,
from ./include/linux/cache.h:6,
from ./include/linux/time.h:5:
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c: In function ‘driver_initialize’:
./include/linux/export.h:27:22: error: passing argument 1 of ‘class_create’ from incompatible pointer type [-Werror=incompatible-pointer-types]
27 | #define THIS_MODULE (&__this_module)
| ~^~~~~~~~~~~~~~~
| |
| struct module *
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:494:31: note: in expansion of macro ‘THIS_MODULE’
494 | device_class = class_create(THIS_MODULE, KERNETIX_DEVICE_NAME);
| ^~~~~~~~~~~
In file included from ./include/linux/device.h:31,
from ./include/linux/cdev.h:8,
from /home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:13:
./include/linux/device/class.h:230:54: note: expected ‘const char *’ but argument is of type ‘struct module *’
230 | struct class * __must_check class_create(const char *name);
| ~~~~~~~~~~~~^~~~
/home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.c:494:18: error: too many arguments to function ‘class_create’
494 | device_class = class_create(THIS_MODULE, KERNETIX_DEVICE_NAME);
| ^~~~~~~~~~~~
./include/linux/device/class.h:230:29: note: declared here
230 | struct class * __must_check class_create(const char *name);
| ^~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:252: /home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver/kernetix.o] Error 1
make[1]: *** [Makefile:2050: /home/moldimolt/Downloads/Platbox/PlatboxDrv/linux/driver] Error 2
make: *** [Makefile:25: kernetix] Error 2
Thank you.
The chipset
command interleaves writes to stdout and stderr without proper flushing. This means in practice that the "OK" or error messages are displayed before the values they refer to, making the output impossible to understand.
A simple fix is to replace every occurrence of stderr
by stdout
in Platboxlib/src/global.cpp
.
Hi,I am compiling on windows and I am getting the following error, file Acer/SpiAccessViaSmi.cpp not found!
Is it just me not doing it right? Hope you can give some pointers, thanks.
D:\Tmp\platbox\Platbox-main\Platbox-main\build>cmake --build build64/ --config Release
CMake is re-running because D:/Tmp/platbox/Platbox-main/Platbox-main/build/build64/CMakeFiles/generate.stamp dependency file is missing.
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621.
-- Configuring done
CMake Error at pocs/CMakeLists.txt:36 (add_executable):
Cannot find source file:
Acer/SpiAccessViaSmi.cpp
Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
.hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc
CMake Error at pocs/CMakeLists.txt:36 (add_executable):
No SOURCES given to target: AcerSpiAccessViaSmiPoc
CMake Generate step failed. Build files cannot be regenerated correctly.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.