<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>P {MARGIN-TOP: 0mm; MARGIN-BOTTOM: 0mm}</style>
</head>
<body>
<div style="FONT-FAMILY: Arial; FONT-SIZE: 10pt" id="ezFormProc_div">
<div style="FONT-FAMILY: Arial" id="msgbody">
<div>
<div style="LINE-HEIGHT: 15pt"><br>
Hi, Dave,</div>
<div style="LINE-HEIGHT: 15pt">&nbsp;</div>
<div style="LINE-HEIGHT: 15pt">Thank you for the kind explanation and I think it will help much&nbsp;for me.</div>
<div style="LINE-HEIGHT: 15pt">&nbsp;</div>
<div style="LINE-HEIGHT: 15pt">I searched down the uClib as you told me and could locate the kernel sys_write function.</div>
<div style="LINE-HEIGHT: 15pt">In my case, the arch is sparc, and it is defined in fs/read_write.c as you said(in linux kernel source).</div>
<div style="LINE-HEIGHT: 15pt">&nbsp;</div>
<div style="LINE-HEIGHT: 15pt">I've checked that</div>
<div style="LINE-HEIGHT: 15pt">SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count)</div>
<div style="LINE-HEIGHT: 15pt">is expanded to</div>
<div style="LINE-HEIGHT: 15pt">=&gt; asmlinkage long sys_write(unsigned int fd, const char __user * buf, size_t count)</div>
<div style="LINE-HEIGHT: 15pt">&nbsp;</div>
<div style="LINE-HEIGHT: 15pt">and I was able to use prom_printf (write to uart) to print what I tried to print in busybox with printf.</div>
<div style="LINE-HEIGHT: 15pt">Now I can see busybox printf at least through the uart port though it's not yet shown on the LCD(which I'm trying to map to tty1 and the shell).</div>
<div style="LINE-HEIGHT: 15pt">Thank you!</div>
<div style="LINE-HEIGHT: 15pt">&nbsp;</div>
<div style="LINE-HEIGHT: 15pt">Chan</div>
<div style="LINE-HEIGHT: 15pt">&nbsp;</div>
<div style="LINE-HEIGHT: 15pt">
<hr tabindex="-1">
</div>
<div style="LINE-HEIGHT: 15pt"><b>From : </b>&quot;Dave Hylands&quot; &lt;dhylands@gmail.com&gt;<br>
<b>Sent : </b>2014-03-13 02:54:40 ( &#43;09:00 )<br>
<b>To : </b>Kim Chan &lt;ckim@etri.re.kr&gt;<br>
<b>Cc : </b>Mohan L &lt;l.mohanphy@gmail.com&gt;, kernelnewbies@kernelnewbies.org &lt;kernelnewbies@kernelnewbies.org&gt;<br>
<b>Subject : </b>Re: where is the printf source for busybox?<br>
<br>
</div>
<div style="LINE-HEIGHT: 15pt" dir="ltr">Hi,<br>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Tue, Mar 11, 2014 at 11:55 PM, Kim Chan <span dir="ltr">
&lt;<a href="mailto:ckim@etri.re.kr" target="_blank">ckim@etri.re.kr</a>&gt;</span> wrote:<br>
<blockquote style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>
<div style="FONT-FAMILY: Arial; FONT-SIZE: 10pt">
<div style="FONT-FAMILY: Arial">
<div>
<div style="LINE-HEIGHT: 15pt"><br>
Wow, that was it. I'm happy to hear that because I thought it should end up with a system call anyway.
</div>
<div style="LINE-HEIGHT: 15pt">Then isn't there some codes making the system call? Or is it that the compiler understands that 'write' is a system call and inserts the assembly code for calling it by itself?</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>In uclibc, the write source code is found here:<br>
<a href="http://git.uclibc.org/uClibc/tree/libc/sysdeps/linux/common/write.c" target="_blank">http://git.uclibc.org/uClibc/tree/libc/sysdeps/linux/common/write.c</a><br>
<br>
</div>
<div>How the syscall is actually implemented is architecture specific, and will be in one of the directories here:<br>
<a href="http://git.uclibc.org/uClibc/tree/libc/sysdeps/linux" target="_blank">http://git.uclibc.org/uClibc/tree/libc/sysdeps/linux</a><br>
<br>
</div>
<div>For example, for ARM, with EABI, then I believe that it winds up here:<br>
<a href="http://git.uclibc.org/uClibc/tree/libc/sysdeps/linux/arm/syscall-eabi.S" target="_blank">http://git.uclibc.org/uClibc/tree/libc/sysdeps/linux/arm/syscall-eabi.S</a><br>
<br>
</div>
<div>The SWI instruction transfers control to the kernel.<br>
<br>
</div>
<div>On the kernel side, how the syscalls get handled is also architecture specific, but it will generally wind up at a function called sys_FUNCTION, however the generation of the function name is usually hidden behind a macro.<br>
</div>
<div><br>
</div>
<div>So sys_write in the kernel winds up being declared here:<br>
<a href="http://lxr.linux.no/#linux&#43;v3.13.5/fs/read_write.c#L514" target="_blank">http://lxr.linux.no/#linux&#43;v3.13.5/fs/read_write.c#L514</a><br>
<br>
</div>
</div>
-- <br>
Dave Hylands<br>
Shuswap, BC, Canada<br>
<a href="http://www.davehylands.com/" target="_blank">http://www.davehylands.com</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>