This is a list of topics I plan to write some posts about:
* softlockup and hung tasks.
* kernel debugging tools: kmememleak, lockdep, kmemcheck, perf
* how to submit patches to Linux kernel.
* getting started with the Linux kernel.
* anatomy of the TCP/IP Linux stack.
* analyze TCP connection setup using tcpdump.
* kernel/userspace communication.
Interrupt Enable
Life is a series of rude awakenings
Thursday, June 30, 2011
Wednesday, May 6, 2009
Introducing pread
There are many situations when you just want to read some data from a file starting with a given offset. The usual way of doing this is:
You can do this in one function call using pread(2) . The above code is equivalent with:
In a similar manner you can notice the existence of pwrite(2) which writes some data into a file at a given position.
lseek(fd, offset, SEEK_SET);
read(fd, buffer, LEN);
You can do this in one function call using pread(2) . The above code is equivalent with:
pread(fd, buffer, LEN, offset);
In a similar manner you can notice the existence of pwrite(2) which writes some data into a file at a given position.
Wednesday, March 18, 2009
Wednesday, March 11, 2009
ltrace
Usage: ltrace [option ...] [command [arg ...]]
ltrace is a tool that simply runs the specified command until it exits. It intercepts and records the dynamic library calls which are called by the executed process.
ltrace accepts a lot of options. You can trace also for system calls, count time , follow forks etc. A short list with options can be found below:
ltrace is a tool that simply runs the specified command until it exits. It intercepts and records the dynamic library calls which are called by the executed process.
dan@lemon:~/playground$ ltrace -n 8 -C date
__libc_start_main(0x8049780, 1, 0xbfb1e874, 0x8052c50, 0x8052c40
setlocale(6, "") = "en_US.UTF-8"
bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale"
textdomain("coreutils") = "coreutils"
__cxa_atexit(0x804cd70, 0, 0, 0xb7ee4ff4, 0xbfb1e7d8) = 0
getopt_long(1, 0xbfb1e874, "d:f:I::r:Rs:u", 0x8053ea0, NULL) = -1
nl_langinfo(131180, 0xbfb1e874, 0x8053e85, 0x8053ea0, 0) = 0xb7ef3915
clock_gettime(0, 0xbfb1e7b8, 0xb7dae8f5, 0xb7ee4ff4, 0) = 0
localtime(0xbfb1e6c8) = 0xb7ee8380
strftime(" Wed", 1024, " %a", 0xb7ee8380) = 4
fwrite("Wed", 3, 1, 0xb7ee54c0) = 1
fputc(' ', 0xb7ee54c0) = 32
strftime(" Mar", 1024, " %b", 0xb7ee8380) = 4
fwrite("Mar", 3, 1, 0xb7ee54c0) = 1
fputc(' ', 0xb7ee54c0) = 32
fwrite("11", 2, 1, 0xb7ee54c0) = 1
fputc(' ', 0xb7ee54c0) = 32
fputc('0', 0xb7ee54c0) = 48
fwrite("9", 1, 1, 0xb7ee54c0) = 1
fputc(':', 0xb7ee54c0) = 58
fwrite("38", 2, 1, 0xb7ee54c0) = 1
fputc(':', 0xb7ee54c0) = 58
fwrite("33", 2, 1, 0xb7ee54c0) = 1
fputc(' ', 0xb7ee54c0) = 32
strlen("EET") = 3
fwrite("EET", 3, 1, 0xb7ee54c0) = 1
fputc(' ', 0xb7ee54c0) = 32
fwrite("2009", 4, 1, 0xb7ee54c0) = 1
__overflow(0xb7ee54c0, 10, 0x1e08f70c, 0, 0x1e08f70cWed Mar 11 09:38:33 EET 2009
) = 10
exit(0
__fpending(0xb7ee54c0, 0xb7f20ff4, 0x8048704, 0xb7ee4ff4, 0) = 0
fclose(0xb7ee54c0) = 0
__fpending(0xb7ee5560, 0xb7f20ff4, 0x8048704, 0xb7ee4ff4, 0) = 0
fclose(0xb7ee5560) = 0
+++ exited (status 0) +++
ltrace accepts a lot of options. You can trace also for system calls, count time , follow forks etc. A short list with options can be found below:
-a, --align=COLUMN align return values in a secific column.
-c count time and calls, and report a summary on exit.
-C, --demangle decode low-level symbol names into user-level names.
-d, --debug print debugging info.
-e expr modify which events to trace.
-f follow forks.
-h, --help display this help and exit.
-i print instruction pointer at time of library call.
-l, --library=FILE print library calls from this library only.
-L do NOT display library calls.
-n, --indent=NR indent output by NR spaces for each call level nesting.
-o, --output=FILE write the trace output to that file.
-p PID attach to the process with the process ID pid.
-r print relative timestamps.
-s STRLEN specify the maximum string size to print.
-S display system calls.
-t, -tt, -ttt print absolute timestamps.
-T show the time spent inside each call.
-u USERNAME run command with the userid, groupid of username.
-V, --version output version information and exit.
-x NAME treat the global NAME like a library subroutine.
Tuesday, March 3, 2009
dmidecode
dmidecode is a tool for dumping a computer's DMI table contents in a human readable format. This table contains information regarding system's hardware components as described in BIOS.
More information you can find here or in dmidecode(8) manpage.
More information you can find here or in dmidecode(8) manpage.
Sunday, February 22, 2009
Friday, February 13, 2009
Lindent
Lindent is a script that changes the appearance of a C program according to linux kernel coding style. It can be found in linux/scripts/ and it makes use of indent.(see indent(1) manual page).
For a debian based distribution running Lindent is straightforward:
#install indent
apt-get install indent
#run Lindent over a file
linux/scripts/Lindent file.c
The preferred coding style used in linux kernel is described in linux/Documentation/CodingStyle.
For a debian based distribution running Lindent is straightforward:
#install indent
apt-get install indent
#run Lindent over a file
linux/scripts/Lindent file.c
The preferred coding style used in linux kernel is described in linux/Documentation/CodingStyle.
Subscribe to:
Posts (Atom)