免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1686 | 回复: 9
打印 上一主题 下一主题

syslog? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-08 15:47 |只看该作者 |倒序浏览
做的一個嵌入式繫統,基于ARM7,uClinux的內覈。IDE的驅動事做成糢塊掛接上去的。工作方式事內覈引導起來后把控製權交給應用程序。應用程序是死循環的,除非用戶退齣操作和崩潰,否則不會退齣。現在由于硬盤不兼容的問題,應用程序不能讀取硬盤上的數據。需要改寫和調試IDE驅動程序。但是,産品扳子上不能接齣串口綫,無法從串口看到齣錯和調試信息。隻能設法將調試信息從TV輸齣。應用程序可以實現信號的轉換從TV輸齣在電視上。但是,從內覈級的驅動中如何將調試信息提供給應用級的應用程序?

在驅動糢塊中申請一快內存,將調試信息寫如這快內存,當時如何將這快內存的地阯創給應用程序呢?

[ 本帖最后由 napleon 于 2006-3-9 14:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-03-08 15:54 |只看该作者
printk的消息在内核缓冲区中, 应用程序syslog获得它, 具体可以man 2 syslog

>在驅動糢塊中申請一快內存,將調試信息寫如這快內存,當時如何將這快內存的地阯創給應用程序呢?
地址好给, 但用户不好读写。  这个方法恐怕不合适。

BTW: 你打了好多错别繁体字, 建议用简体。

论坛徽章:
0
3 [报告]
发表于 2006-03-08 15:58 |只看该作者
我知道這辦法不太好,請教一下,妳能給點建議嗎?有何更好的辦法?!

论坛徽章:
0
4 [报告]
发表于 2006-03-08 20:06 |只看该作者

启动 syslog

讯息在 /var/log/messages 中。你可以读出来

论坛徽章:
0
5 [报告]
发表于 2006-03-09 08:47 |只看该作者
syslog(2,buf,len)讀取printk緩存的信息。但是,我將內覈中的調試信息寫道一個buffer中。不隻一條信息,所有的要顯示的信息都寫道這個申請的buffer中.然后,把這個buffer傳遞給應用層麵的程式.這個syslog(2,buf,len)能辦到嗎?

這是裁減的uClinux-2.4.17,romfs文件繫統。沒有/var/log/message的。隻有必須的/dev 和/etc以及 /bin ,另外兩個掛接外部存儲設備的目錄。

论坛徽章:
0
6 [报告]
发表于 2006-03-09 13:59 |只看该作者
/* this is test codes which will to get the message from kernel*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/klog.h>
#include <unistd.h>
#include <linux/kernel.h>

char *get_buffer_from_cache(void);
void show_kernel_information(const char *buffer);

#define     RMuint8     int
#define     TEXT_X    20
#define     TEXT_Y    24
#define     MAX      1024
RMuint8    line_num = 24;
//char buffer[MAX];

char *get_buffer_from_cache(void)
{
  char buffer[MAX];
  char *tmp=NULL;
  RMuint8 ch=0;

  ch = syslog(2,buffer,MAX);

  printf("get from kernel: %d\n",ch);

  if (ch > 0)
        tmp = buffer;
  else
        {
          printf("can't get information from kernel\n");
        }

  return tmp;
}

void show_kernel_information(const char *buffer)
{
  RMuint8 len=0;
if (buffer ==NULL)
{
        printf("bad luck! \n");
        exit(-1);
}
  len = sizeof (buffer);
  if (len != 0 )
        printf("%s\n",buffer);
//      pMpegDecoder->RenderText (buffer, 250, TEXT_X, TEXT_Y+line_num, 260-32, 20, CHI_12_12);
  line_num += TEXT_Y;
}

int main (char *argc, char *argv[])
{
        char *buf = NULL;
        buf = get_buffer_from_cache();
        show_kernel_information(buf);
        return 0;
}

///////////////////////////////////////////////////////////////
// The end
//////////////////////////////////////////////////////////////


[root@localhost dragon]# ./test
get from kernel: 0
can't get information from kernel
bad luck!

man 2 syslog 文档上说:-1 是syslog失败,number返回,是成功。那么0是什么原因呢?请教!!

论坛徽章:
0
7 [报告]
发表于 2006-03-09 14:12 |只看该作者
楼主不是台湾/香港/澳门同胞吧? 如果是的话, 不该打错这么多繁体错别字哦。
印象里只有大陆人用繁体爱出错误

论坛徽章:
0
8 [报告]
发表于 2006-03-09 14:42 |只看该作者
BOSS是臺灣的。公司的終耑裝的作業繫統是正體的。當然,可以裝簡體輸入法。
打錯字很對不起!以后會註意的。

论坛徽章:
0
9 [报告]
发表于 2006-03-09 18:33 |只看该作者
现在到自己的REDHAT上回复.
用klogctl 代替 syslog 在标准 linux中得到返回的数值是 -1 .
但是在uClinux中 返回为 0

但是,如何才能得到 调用成功呢?

论坛徽章:
0
10 [报告]
发表于 2006-03-15 10:13 |只看该作者
问题已经解决.谢谢诸位的关心.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP