강좌 & 팁
예상 포인터
휴~~
어려운 문제에 봉착 했습니다.
커널 해킹용 시리얼 포트까지 열어 놓았는데
압축 해제 시리얼 메시지까지 나오고 그 뒤로 전혀 나오지 않고 있죠…
이럴 경우에는 여러 가지 가능성이 있습니다.
1) console= 에 지정하는 디바이스 드라이버 이름 지정에 문제가 있거나
2) 아니면 콘솔 디바이스 드라이버가 동작하기 전에 커널이 멈추어 버리거나
3) 가끔 있는 경우지만 console=로 지정한 시리얼 포트가 다른 용도로 사용되거나
그 밖에 몇 가지가 있습니다.
그런데 첫번째 console= 에 지정하는 디바이스 드라이버 이름 문제는 별로 의심하고 싶지 않습니다.
왜냐하면 삼성 것은 대부분 이 이름을 사용하고 이미 2410에서 적용해서 문제가 없었기 때문입니다.
그리고 두 번째는 일단 디버깅 하기가 무섭습니다. 무한 삽질의 시작이거든요
일단 세번째를 먼저 의심하고 싶습니다. 시리얼 포트가 다른 용도로 사용될 경우라면현재와 같은 증상이 나올 수 있거든요..
시리얼 포트 리소스 지정 위치
ARM은 각각의 보드에 따른 하드웨어 설정 내용을
MACHINE_START( … 을 포함하는 소스상에 대부분 존재 합니다.
SMDK2440 보드는 다음 소스에 위치합니다.
arch/arm/mach-s3c2440/mach-smdk2440.c
이 파일에는 SMDK2440에 설치되는 디바이스드라이버 목록이나 기타 설정 사항들이 있습니다.
여기서 잘 찾아보면 시리얼 포트에 관련된 설정 값들이 있습니다.
다음이 있네요
3c2410_uartcfg smdk2440_uartcfgs
오옷!!
뭔가 이 설정 내용 중 주석에 IRPORT란 것이 눈에 보입니다. 그리고 내용도 조금 이상하네요
static struct s3c2410_uartcfg smdk2440_uartcfgs[] __initdata = {
[0] = {
.hwport = 0,
.flags = 0,
.ucon = 0x3c5,
.ulcon = 0x03,
.ufcon = 0x51,
},
[1] = {
.hwport = 1,
.flags = 0,
.ucon = 0x3c5,
.ulcon = 0x03,
.ufcon = 0x51,
},
/* IR port */
[2] = {
.hwport = 2,
.flags = 0,
.ucon = 0x3c5,
.ulcon = 0x43,
.ufcon = 0x51,
}
};
포트 2 를 설정하는 부분에 주석으로 IR port 라고 하고 있고
더구나 ulcon 이 다른 것과 다르게 0x43으로 설정되어 있습니다.
오호…
이 부분은 아무래도 IR 포트용으로 line 특성을 달리 설정한 것 같습니다.
.ulcon = 0x43,
이 부분을
.ulcon = 0x03,
으로 고쳐서 재 컴파일 한 다음 보드에 올려 보겠습니다.
EZBOOT>tfk
receive zImage.ez-s3c2440
tx ARP
ARP error
tx ARP
rx ARP
HOST MAC : 00:FF:A7:1F:64:00
HOST IP : 192.168.10.61
LOCAL IP : 192.168.10.183
option [timeout 120 tsize 1790920]
argv=TFK1781760
size = 1790920
...write 1790920 complete
...verify complete
EZBOOT>rst
System Soft Reset.......
EZBOOT>0123B
WELCOME EZBOOT V2.3.05 (FALINUX Co.,Ltd) ......S3C2440(EZ-S3C2440) (400MHz)
Program by You Young-chang, Oh Jae-Kyong, Jang Hyung-Gi
Last Modify Jun 1 2009
Detect Samsung NAND 64M 3.3V 8-bit Flash : vid=EC pid=76
SIZE 64-Mbytes (page=512, block=16K)
... not supported part_nr=2
clear lcd .....
Quickly Autoboot [ENTER] / Goto BOOT-MENU press [space bar]
Copy Kernel Image .....
Copy Ramdisk Image .....
Starting kernel [MARCH 362]...
kernel command [EZBOOT mem=64M initrd=0x30800000,5M root=/dev/ram0 ramdisk=16384 console=ttySAC2,115200 video=ezfb:panel:2 ip0=192.168.10.183 mac=00:FA:01:A2:13:04 netmask=255.255.0.0 gw=192.168.10.1 host=192.168.10.61 nandparts=2,8,54 ]
Uncompressing Linux..................................................................................................................... done, booting the kernel.
Linux version 2.6.28.10 (root@localhost.localdomain) (gcc version 3.4.3) #8 Fri Jun 5 09:13:12 EDT 2009
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: SMDK2440
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C244X: core 399.651 MHz, memory 133.217 MHz, peripheral 66.608 MHz
S3C24XX Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (2.116 MHz), fast, MPLL on, UPLL on
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: EZBOOT mem=64M initrd=0x30800000,5M root=/dev/ram0 ramdisk=16384 console=ttySAC2,115200 video=ezfb:panel:2 ip0=192.168.10.183 mac=00:FA:01:A2:13:04 netmask=255.255.0.0 gw=192.168.10.1 host=192.168.10.61 nandparts=2,8,54
irq: clearing pending status 00000400
irq: clearing subpending status 000000c0
irq: clearing subpending status 00000080
PID hash table entries: 256 (order: 8, 1024 bytes)
timer tcon=00000009, tcnt d8d2, tcfg 000002ff,00003333, usec 0000170f
Console: colour dummy device 80x30
console [ttySAC2] enabled
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 55928KB available (3320K code, 327K data, 152K init)
Calibrating delay loop... 199.47 BogoMIPS (lpj=498688)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 484 bytes
NET: Registered protocol family 16
S3C2410 Power Management, (c) 2004 Simtec Electronics
S3C2440: Initialising architecture
S3C2440: IRQ Support
S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics
DMA channel 0 at c4808000, irq 33
DMA channel 1 at c4808040, irq 34
DMA channel 2 at c4808080, irq 35
DMA channel 3 at c48080c0, irq 36
S3C244X: Clock Support, DVS off
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
NET: Registered protocol family 1
checking if image is initramfs...it isn't (no cpio magic); looks like an initrd
Freeing initrd memory: 5120K
NetWinder Floating Point Emulator V0.97 (extended precision)
JFFS2 version 2.2. (NAND) (SUMMARY) 짤 2001-2006 Red Hat, Inc.
msgmni has been set to 119
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
Console: switching to colour frame buffer device 30x40
fb0: s3c2410fb frame buffer device
lp: driver loaded but no devices found
ppdev: user-space parallel port driver
Serial: 8250/16550 driver4 ports, IRQ sharing enabled
s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440
s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440
s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440
brd: module loaded
loop: module loaded
dm9000 Ethernet Driver, V1.31
Uniform Multi-Platform E-IDE driver
ide-gd driver 1.18
ide-cd driver 5.00
Driver 'sd' needs updating - please use bus_type methods
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
s3c2440-nand s3c2440-nand: Tacls=3, 22ns Twrph0=8 60ns, Twrph1=3 22ns
NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)
Scanning device for bad blocks
Creating 8 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00004000 : "Boot Agent"
0x00000000-0x00200000 : "S3C2410 flash partition 1"
0x00400000-0x00800000 : "S3C2410 flash partition 2"
0x00800000-0x00a00000 : "S3C2410 flash partition 3"
0x00a00000-0x00e00000 : "S3C2410 flash partition 4"
0x00e00000-0x01800000 : "S3C2410 flash partition 5"
0x01800000-0x03000000 : "S3C2410 flash partition 6"
0x03000000-0x04000000 : "S3C2410 flash partition 7"
usbmon: debugfs is not available
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
usbcore: registered new interface driver libusual
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver
mice: PS/2 mouse device common for all mice
S3C24XX RTC, (c) 2004,2006 Simtec Electronics
s3c2440-i2c s3c2440-i2c: slave address 0x10
s3c2440-i2c s3c2440-i2c: bus frequency set to 378 KHz
s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter
S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
RAMDISK: Compressed image found at block 0
length error
VFS: Mounted root (ext2 filesystem) readonly.
Freeing init memory: 152K
INIT: version 2.86 booting
INIT: Entering runlevel: 3
SIOCSIFADDR: No such device
SIOCSIFNETMASK: No such device
SIOCGIFFLAGS: No such device
route: SIOC[ADD|DEL]RT: No such device
mount: Mounting /dev/mtdblock2 on /app failed: No such device
/usr/local/apache/bin/apachectl start: httpd started
Starting system logger: [ OK ]
Starting INET services: [ OK ]
Welcome to FALinux (www.falinux.com)
Linux Kernel 2.6.28.10
falinux login:
음하하하하
심 봤습니다.
시리얼 포트가 제대로 동작해서 정상 부팅 됩니다.
EZ-S2440 도 시리얼 포트 포팅이 거져 끝났습니다.
자 이제 이제까지 작업한 환경 설정을 다음에 보는 것과 같은 명령을 이용하여 저장하고
[root@localhost linux]# cp .config arch/arm/configs/ezs2440_defconfig
커널을 클리어 합니다.
[root@localhost linux]# make clean
새로 추가된 파일이 있는가 확인 합니다.
[root@localhost linux]# svn st
새로 생성된 것중 서브버전에 추가 할 파일을 추가 합니다.
[root@localhost linux]# cd arch/arm/configs/
[root@localhost configs]#svn add ezs3c2440_defconfig
서브 버전에 커밋 합니다.
[root@localhost configs]# cd ../.../..
[root@localhost linux]# svn ci -m "EZ-S2440 serial first portign sucess"
아…
오늘도 힘찬 하루 …
안녕하세요. 좋은 강좌 잘 보고 있습니다.
2440보드에서 포팅중인데 커널 패닉이 발생합니다.
마지막에 이런 메시지가 뜨는데.. 램디스크 인식이 안되는듯 한데.. 2410보드에서도 이런 메시지가 떴던데..
이건 해결 안해주시는 지요..^^;;
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
VFS: Cannot open root device "mtdblock2" or unknown-block(31,2)
Please append a correct "root=" boot option; here are the available partitions:
1f00 16 mtdblock0 (driver?)
1f01 2048 mtdblock1 (driver?)
1f02 4096 mtdblock2 (driver?)
1f03 2048 mtdblock3 (driver?)
1f04 4096 mtdblock4 (driver?)
1f05 10240 mtdblock5 (driver?)
1f06 24576 mtdblock6 (driver?)
1f07 16384 mtdblock7 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)