struct map_desc 구조체.

puresupe의 이미지

환경은 kernel 2.4 입니다.

저는 지금 xhyper255A를 사용하고 있구요. SB16C554를 통해서 UART를 확장하려는 시도를 하고있습니다.

다른이아니라. arch/arm/xhyper255.c라는 파일을 통해서요

map_desc 구조체에다가 다음과같이 입력하였습니다.

{ 0xff500000, 0x14000000, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 }, // CS5 : Serial CS1 A8:L, A9:L, A10: 0
{ 0xff510000, 0x14000100, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 }, // CS5 : Serial CS2 A8:H, A9:L, A10: 0
{ 0xff520000, 0x14000200, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 }, // CS5 : Serial CS3 A8:L, A9:H, A10: 0
{ 0xff530000, 0x14000000, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 }, // CS5 : Serial CS4 A8:H, A9:H, A10: 0

PXA255에서 CS5는 0x1400000부터 시작하기때문에. 위와 같이 커널 영역과 물리 영역을
매핑하였구요, 0xff500000 ~ 0xff530000 사이의 접근 주소에대해서 cs5가 enable 되게
해두었습니다.

간단히, 해당 주소가 정확히 매핑되어있으며, 데이터가 제대로 발생되는지를 알아보기위해
아래와같은 간단한 모듈프로그램을 만들어서, 오실로스코프로 출력되는 파형을 체크하려고
하는데요.

#define TEST_ADDR (*(volatile unsigned*)0xff500000)

static int __init TEAD_ADDR_MODULE(void)
{
int count;
for(count=0;count<500000;count++){
TEST_ADDR = 0x3;
}
}

이 프로그램은. insmod로 커널에 올렸을때, 물리주소로 매핑되어있는
가상주소 0xff500000에 0x3이라는 데이터를 출력시킴으로써,
PXA255의 address스 버스와 data버스에서 신호가 제대로 나오는지
테스트를 하기위한 목적입니다.

하지만 아래와 같은 oops가 떠서 이렇게 글 올립니다.

[root@Xhyper255 /root]$insmod addr_dev.o

Open processing , Succeed
Unable to handle kernel paging request at virtual address ff500000
pgd = c1f58000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: ffffffff
CPU: 0
pc : [] lr : [] Not tainted
sp : c1e0fef8 ip : 0000001f fp : c1e0ff04
r10: c1e0e000 r9 : 02027468 r8 : ffffffea
r7 : 00000060 r6 : c1760000 r5 : 00000000 r4 : c38e0000
r3 : ff500000 r2 : 00000003 r1 : c1e0e000 r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 Segment user
Control: 397F Table: A1F58000 DAC: 00000015
Process insmod (pid: 62, stackpage=c1e0f000)
Stack: (0xc1e0fee8 to 0xc1e10000)
fee0: c00171a0 c38e0084 60000013 ffffffff c1e0ffa4 c1e0ff08
ff00: c0072f84 c38e006c c1760000 c1e0ff1c c1762000 00000008 c1fb13a0 00000060
ff20: c01f9378 c38e0060 00000240 00000000 00000000 00000000 00000000 00000000
ff40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ff60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 bfffcfc8
ff80: 02025d40 02027468 00000080 c0064824 c1e0e000 00000000 00000000 c1e0ffa8
ffa0: c00646a0 c0072898 bfffcfc8 c006a498 0201f850 02027468 ffffffff fbad2084
ffc0: bfffcfc8 02025d40 02027468 c38e0000 00000240 00000000 00000000 bfffcf98
ffe0: 400ebb50 bfffcf88 02010334 400ebb5c 60000010 0201f850 00000000 00000000
Backtrace:
Function entered at [] from []
Function entered at [] from []
Code: e3a0332a e1a033c3 e3a00000 e3a02003 (e5832000)
Segmentation fault

즉, 가상주소 0xff500000와 물리주소 0x14000000와의 매핑이 잘 안이루어졌음을
알수가 있는데요..

어떻게 해야 해결할수 있을까요?

bushi의 이미지

2.6 arm 에선 __phys_to_pfn() 을 사용해서 변환한 page frame number를 사용합니다.
남들이 어떻게 하는지, 기존의 것들이 어떻게 되어 있는지 다른 소스를 보세요.

OTL

puresupe의 이미지

아. 제가 말씀을 안드렸네요.

kernel 2.4 에서 작업하고있습니다.

bushi의 이미지

잘못 매핑된 것이 아니라면 매핑이 아예 되지 않았다는 답 밖에 나오지 않습니다.

iotable_init() 은 하셨습니까 ?
수정된 커널로 부팅된 것이 확실합니까 ?

+

2.4 커널에서 16550 호환 8port UART 칲에 대해 작업했던 것이 기억나서 몇 자 더 적습니다.

io 매핑해주고,
드라이버는 drivers/char/serial.c 를 그냥 사용하고,
include/asm/arch/ 의 serial.h 에 STD_SERIAL_PORT_DEFNS 와 EXTRA_SERIAL_PORT_DEFNS 를 정의해주는 걸로 끝났었습니다.

당시엔 s3c2410 CPU 를 사용했기 때문에 STD_SERIAL_PORT_DEFNS 를 그냥 공란으로 처리하고
나머지 기타등등의 플래그도 별 고민없이 쉽게쉽게 갔는데...
제 기억이 맞다면,
2.4 커널의 PXA UART 가 STD_SERIAL_PORT_DEFNS 를 사용하는 방식으로 구현되어 있습니다.
(2.4 커널 후반부인지 2.6 커널인지는 모르겠지만 아무튼 어느 순간부터 serial.c 가 아닌 독립드라이버로
재작성됐구요)
사용하고 계신 커널의 PXA UART 가 serial.c 를 사용하는 방식으로 구현되어 있다면,
BAUD_BASE, RS_TABLE_SIZE 등의 define 에 신경쓰셔야 할 겁니다.
serial.c 에 하드코딩 된 PXA 용의 뭔가와 쫑이 나지 않는지도 두 눈 부릅뜨고 살피셔야겠네요.

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.