I’ve been working through John Madieu’s Book on Linux Device Driver Development. When typing in the Sample code for the Platform device, I got a Segmentation fault registering the device (insmod).
Continue readingKeeping build output on one screen
When a build goes wrong, the amount of error messaging can easily scroll off the screen. Usually the error is on the first line reported. Here’s a couple ways to make it easier to read just the lines you want.
The first is just to grep for the word ‘error.’ This works for gcc:
make 2>&1 | grep error |
Which produces
/root/devel/mctp_pcc/mctp_pcc.c:178:18: error: ‘name’ undeclared (first use in this function) /root/devel/mctp_pcc/mctp_pcc.c:178:52: error: ‘fe’ undeclared (first use in this function); did you mean ‘fd’? /root/devel/mctp_pcc/mctp_pcc.c:179:9: error: ‘ndev’ undeclared (first use in this function); did you mean ‘cdev’? /root/devel/mctp_pcc/mctp_pcc.c:179:37: error: ‘dev’ undeclared (first use in this function); did you mean ‘cdev’? /root/devel/mctp_pcc/mctp_pcc.c:182:17: error: ‘rc’ undeclared (first use in this function); did you mean ‘rq’? /root/devel/mctp_pcc/mctp_pcc.c:187:20: error: ‘idx’ undeclared (first use in this function); did you mean ‘ida’? /root/devel/mctp_pcc/mctp_pcc.c:190:24: error: ‘STATE_IDLE’ undeclared (first use in this function); did you mean ‘VTIME_IDLE’? /root/devel/mctp_pcc/mctp_pcc.c:193:34: error: ‘mctp_serial_tx_work’ undeclared (first use in this function) /root/devel/mctp_pcc/mctp_pcc.c:197:17: error: label ‘free_netdev’ used but not defined /root/devel/mctp_pcc/mctp_pcc.c:183:17: error: label ‘free_ida’ used but not defined /root/devel/mctp_pcc/mctp_pcc.c:199:1: error: no return statement in function returning non-void [-Werror=return-type] |
A bit of background…all Linux processes have 3 file descriptors (FD) by default. STDIN is for reading in information from other processes. STDIN is file descriptor 0. STDOUT is for, well, STANDARD’ output, or the output that the program is supposed to produce. STDOUT is FD 1. STDERR is for output that is not standard, and is intended for error messages. STDERR is FD 2.. Make and GCC spit their output into STDERR. The trick is to tell the program to redirect standard error into STDOUT via the magic symbol 2>&1. I read this in my head as “two goes into ampersand one.” STDERR is 2, STDOUT is 1.
If you want to get just the first set of line you can use the head command like this:
make 2>&1 | head -10 |
Which produces
make -C /lib/modules/6.2.0+/build M=/root/devel/mctp_pcc modules make[1]: Entering directory '/root/devel/linux' CC [M] /root/devel/mctp_pcc/mctp_pcc.o /root/devel/mctp_pcc/mctp_pcc.c: In function ‘create_mctp_pcc_nnetdev’: /root/devel/mctp_pcc/mctp_pcc.c:178:18: error: ‘name’ undeclared (first use in this function) 178 | snprintf(name, sizeof(name), "mctpipcc%x", fe); | ^~~~ /root/devel/mctp_pcc/mctp_pcc.c:178:18: note: each undeclared identifier is reported only once for each function it appears in /root/devel/mctp_pcc/mctp_pcc.c:178:52: error: ‘fe’ undeclared (first use in this function); did you mean ‘fd’? 178 | snprintf(name, sizeof(name), "mctpipcc%x", fe); |
This gets just the first 10 lines…use a different number if you want a different amount of output
These two options are fairly easy to type and thus don’t really call for scripting. As the amount of filtering gets longer,. you make want to make scripts that build up more complex selection of the output.
If you have control of your makefile, you can use the -Wfatal-errors
flag as is written up here, but I am calling into precanned Makefiles and it drops the flag. To modify Makefiles see this discussion.
One liner: Kill an unresponsive remote shell session
{enter} ~ . |
Why is ABC Notation not ABC…?
When we read we begin with
A.B.C
When we sing we begin with Do Re Mi
–“Do, a Deer…” THe Sound of Music
Western music has coalesced around the major scale. Which is really a pity, because western music notation was built around the natural minor scale.
Continue readingUse * to Seach for the word under the cursor in vim
This might be my new favorite vimism.
The idea that there is a single character shortcut for searching for the character under the cursor is brilliant, and something I will use, quite a bit, in my day to day work. It might be more powerful than tags.
Hello World in rust on ARM64 includes a lot of code
I had not taken the time to try and work with Rust on ARM64 in the past. Since I was doing disassembly of simple C programs on an one of our servers, I figured it couldn’t hurt to try the same thing with rust.
Continue readingVector Multiplication Using the Neon Coprocessor instructions on ARM64
Last post I showed how to do multiplication for a vector of integers using ARM64 instructions. Lots of use cases require these kinds of operations to be performed in bulk. The Neon coprocessor has instructions that allow for the parallel loading and multiplication of numbers. Here’s my simplistic test of these instructions.
Continue readingVector Multiplication in ARM64 assembly
Lets start with the basics: we can multiply the cells two vectors in C code and disassemble the resulting binary. This is a trivial operation of multiplying each cell in the first vector by the corresponding cell in the second vector. It is not a cross product. This will be a naive implementation, but it should get us started.
Continue readingAgile is not agile
Based on previous experiences, I would be hard pressed to join a team that has Scrum masters.
I expect that my previous experience was extreme, but not outside expectations for an organization that felt the need to officially embrace Agile(tm) and the concept of agile practitioners as part of the development process. It has been a bit over a year, and my frustration at the process has had a bit of time to settle, but I still feel my virtual hackles rise up when I think about the process.
Continue readingperf option to test branch records
perf record --branch-filter any,save_type,u true |