改行コードは扱う場所によってコードを変えなくてはいけないようです。
めんどくさいというかこんなことやめてほしいです。

UNIX:\n
シリアル通信:\r
シリアル出力:\r\n
⇒シリアル通信とシリアル出力は何が違うんだ????★

このようなコード変換を実施することを一般に端末変換というそうです。
シリアルからの入力時も変換が必要。

UNIX<-------->シリアル出力
\n         \r\n


/* 1文字送信 */
int putc(unsigned char c)
{
if(c == '\n')
{
serial_send_byte(SERIAL_DEFAULT_DEVICE,'\r');←★シリアル出力時に\rを付加。
}

return serial_send_byte(SERIAL_DEFAULT_DEVICE,c);
}

/* 文字列送信 */
int puts(unsigned char *str)
{
while(*str)
{
putc(*(str++));
}
return 0;
}