<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEQBRH0ycCp7ImA9WhRaE0U.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093</id><updated>2012-02-16T17:59:15.398+08:00</updated><category term="開放原始碼" /><category term="linux" /><category term="driver" /><category term="arm" /><category term="embedded" /><category term="DM355" /><category term="移植" /><category term="Davinci" /><category term="emacs" /><category term="單晶片、8051、PIC" /><category term="軟體" /><category term="日本" /><category term="TI" /><category term="免費" /><category term="LCD、液晶顯示、8051、PIC、電子鐘、Clock" /><category term="筆記" /><category term="Open Source" /><category term="cross-compile" /><category term="uclibc" /><category term="kscope" /><category term="S3C2440A" /><category term="8051、PIC、LED" /><category term="kicad、EDA、MCU、單晶片、OrCAD、Protel" /><category term="source" /><category term="SAMSUNG" /><category term="editor" /><category term="touch screen" /><category term="android" /><category term="JP60" /><category term="電波鐘" /><category term="motor、DC、8051、PIC、MCU、馬達" /><category term="radio clock" /><category term="fedora、ubuntu、sdcc、codeblocks、gputils" /><category term="kernel" /><category term="DS1821、溫度計、8051、PIC" /><category term="gcc" /><category term="解碼" /><category term="cscope" /><category term="code" /><category term="speaker、music note、MCU、PIC、8051" /><category term="嵌入式" /><category term="ecb" /><category term="porting" /><category term="notes" /><title>Wizign</title><subtitle type="html">Simple is nice!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://wizign.blogspot.com/" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Wizign" /><feedburner:info uri="wizign" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0cNRX0zfCp7ImA9WxJUFEo.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-21287496709725146</id><published>2009-07-13T16:46:00.002+08:00</published><updated>2009-07-13T16:51:34.384+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-13T16:51:34.384+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="解碼" /><category scheme="http://www.blogger.com/atom/ns#" term="電波鐘" /><category scheme="http://www.blogger.com/atom/ns#" term="JP60" /><category scheme="http://www.blogger.com/atom/ns#" term="radio clock" /><category scheme="http://www.blogger.com/atom/ns#" term="日本" /><title>電波鐘 - 日本 JP60 電波解碼</title><content type="html">用單晶片 PIC16F877A + 電波鐘接收模組, 使用 C 語言撰寫解碼程式.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wrrgA1bUsUs&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/wrrgA1bUsUs&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-21287496709725146?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6Wxvh2-whFr_bVHpAYT2hW3U5C8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Wxvh2-whFr_bVHpAYT2hW3U5C8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6Wxvh2-whFr_bVHpAYT2hW3U5C8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Wxvh2-whFr_bVHpAYT2hW3U5C8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/pceRQPfa498" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/21287496709725146/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=21287496709725146" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/21287496709725146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/21287496709725146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/pceRQPfa498/jp60.html" title="電波鐘 - 日本 JP60 電波解碼" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2009/07/jp60.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGR38-cSp7ImA9WxVWEUk.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-3114147121798281639</id><published>2009-02-21T00:04:00.003+08:00</published><updated>2009-02-21T00:08:46.159+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-21T00:08:46.159+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="免費" /><category scheme="http://www.blogger.com/atom/ns#" term="開放原始碼" /><category scheme="http://www.blogger.com/atom/ns#" term="Open Source" /><category scheme="http://www.blogger.com/atom/ns#" term="軟體" /><title>一些可以考慮使用的免費軟體</title><content type="html">&lt;script type="text/javascript" src="http://shots.snap.com/ss/3b1221972ba2a2131e048ee25395d303/snap_shots.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;如果在為商業軟體的授權費用傷腦筋, 可以考慮這個網址上所列的&lt;a class="snap_shots" href="http://www.wizign.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=19%3A2009-02-20-15-49-05&amp;amp;catid=3%3Alinux&amp;amp;Itemid=16&amp;amp;lang=zh"&gt;一些可以考慮使用的免費軟體&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-3114147121798281639?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e1BERweEuT3prpY-VsuVlSCb7aY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e1BERweEuT3prpY-VsuVlSCb7aY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e1BERweEuT3prpY-VsuVlSCb7aY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e1BERweEuT3prpY-VsuVlSCb7aY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/HXQXBGG3Sgk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/3114147121798281639/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=3114147121798281639" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/3114147121798281639?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/3114147121798281639?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/HXQXBGG3Sgk/blog-post.html" title="一些可以考慮使用的免費軟體" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2009/02/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08HQH8_eCp7ImA9WxRbGEo.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-6299344487544119342</id><published>2008-12-10T10:21:00.001+08:00</published><updated>2008-12-10T10:23:51.140+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T10:23:51.140+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="porting" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="driver" /><category scheme="http://www.blogger.com/atom/ns#" term="touch screen" /><title>TouchScreen driver has been done - 移植 Linux kernel 2.6.25 (Android 版本) 到 SAMSUNG S3C2440A</title><content type="html">關於觸控面板驅動程式(touch screen driver) 的修改, 以下的網址是個好的參考資料:&lt;br /&gt;&lt;a href="http://ccoolloorr.blogspot.com/2008/06/touch-screen-driver.html"&gt;[轉錄帥哥] Touch Screen Driver&lt;/a&gt;&lt;br /&gt;&lt;pre class="vc_log"&gt;S3C2410 touch screen 的 patch file, 請到以下網址下載:&lt;br /&gt;&lt;a href="http://svnweb.openmoko.org/branches/src/target/kernel/2.6.24.x/patches/s3c2410_touchscreen.patch?rev=3966&amp;amp;sortby=rev&amp;amp;sortdir=down&amp;amp;view=markup"&gt;s3c2410_touchscreen.patch&lt;/a&gt;&lt;/pre&gt;patch 檔案裡, 所修改的檔案包括:&lt;br /&gt;arch/arm/plat-s3c24xx/devs.c&lt;br /&gt;include/asm-arm/plat-s3c24xx/devs.h&lt;br /&gt;arch/arm/mach-s3c2410/mach-h1940.c&lt;span style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;drivers/input/touchscreen/Kconfig&lt;br /&gt;drivers/input/touchscreen/Makefile&lt;br /&gt;drivers/input/touchscreen/s3c2410_ts.c&lt;br /&gt;include/asm-arm/arch-s3c2410/ts.h&lt;br /&gt;&lt;br /&gt;之後再調整以下檔案, 就大功告成了.&lt;br /&gt;arch/arm/mach-s3c2440/mach-smdk2440.c&lt;br /&gt;arch/arm/plat-s3c24xx/devs.c&lt;br /&gt;arch/arm/plat-s3c24xx/s3c244x.c&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;下載重新編譯的 kernel, 啟動後的信息如下:&lt;br /&gt;&lt;br /&gt;Starting kernel ...&lt;br /&gt;&lt;br /&gt;Uncompressing Linux........................................................................................................... done, booting the kernel.&lt;br /&gt;Linux version 2.6.25 (armdev@test.intra.wizign.com) (gcc version 4.1.2) #14 Tue Dec 9 15:23:52 CST 2008&lt;br /&gt;CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177&lt;br /&gt;Machine: SBZ2440&lt;br /&gt;Memory policy: ECC disabled, Data cache writeback&lt;br /&gt;CPU S3C2440A (id 0x32440001)&lt;br /&gt;S3C244X: core 399.651 MHz, memory 133.217 MHz, peripheral 66.608 MHz&lt;br /&gt;S3C24XX Clocks, (c) 2004 Simtec Electronics&lt;br /&gt;CLOCK: Slow mode (2.116 MHz), fast, MPLL on, UPLL on&lt;br /&gt;CPU0: D VIVT write-back cache&lt;br /&gt;CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets&lt;br /&gt;CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets&lt;br /&gt;Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256&lt;br /&gt;Kernel command line: root=/dev/nfs rw noinitrd console=ttySAC0,115200 init=/linuxrc nfsroot=192.168.1.12:/vdisk/armdev_fs ip=192.168.1.30:192.168.1.12:192.168f&lt;br /&gt;irq: clearing pending ext status 00000080&lt;br /&gt;irq: clearing subpending status 00000003&lt;br /&gt;irq: clearing subpending status 00000002&lt;br /&gt;PID hash table entries: 256 (order: 8, 1024 bytes)&lt;br /&gt;timer tcon=00500000, tcnt d8d2, tcfg 00000200,00000000, usec 0000170f&lt;br /&gt;Console: colour dummy device 80x30&lt;br /&gt;console [ttySAC0] enabled&lt;br /&gt;Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)&lt;br /&gt;Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;Memory: 64MB = 64MB total&lt;br /&gt;Memory: 61184KB available (3044K code, 508K data, 144K init)&lt;br /&gt;Mount-cache hash table entries: 512&lt;br /&gt;CPU: Testing write buffer coherency: ok&lt;br /&gt;net_namespace: 152 bytes&lt;br /&gt;NET: Registered protocol family 16&lt;br /&gt;S3C2410 Power Management, (c) 2004 Simtec Electronics&lt;br /&gt;S3C2440: Initialising architecture&lt;br /&gt;S3C2440: IRQ Support&lt;br /&gt;S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics&lt;br /&gt;DMA channel 0 at c4800000, irq 33&lt;br /&gt;DMA channel 1 at c4800040, irq 34&lt;br /&gt;DMA channel 2 at c4800080, irq 35&lt;br /&gt;DMA channel 3 at c48000c0, irq 36&lt;br /&gt;S3C244X: Clock Support, DVS off&lt;br /&gt;usbcore: registered new interface driver usbfs&lt;br /&gt;usbcore: registered new interface driver hub&lt;br /&gt;usbcore: registered new device driver usb&lt;br /&gt;NET: Registered protocol family 2&lt;br /&gt;IP route cache hash table entries: 1024 (order: 0, 4096 bytes)&lt;br /&gt;TCP established hash table entries: 2048 (order: 2, 16384 bytes)&lt;br /&gt;TCP bind hash table entries: 2048 (order: 1, 8192 bytes)&lt;br /&gt;TCP: Hash tables configured (established 2048 bind 2048)&lt;br /&gt;TCP reno registered&lt;br /&gt;NetWinder Floating Point Emulator V0.97 (double precision)&lt;br /&gt;JFFS2 version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.&lt;br /&gt;fuse init (API version 7.9)&lt;br /&gt;io scheduler noop registered&lt;br /&gt;io scheduler anticipatory registered (default)&lt;br /&gt;io scheduler deadline registered&lt;br /&gt;io scheduler cfq registered&lt;br /&gt;Console: switching to colour frame buffer device 30x40&lt;br /&gt;fb0: s3c2410fb frame buffer device&lt;br /&gt;lp: driver loaded but no devices found&lt;br /&gt;ppdev: user-space parallel port driver&lt;br /&gt;Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled&lt;br /&gt;s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440&lt;br /&gt;s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440&lt;br /&gt;s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440&lt;br /&gt;brd: module loaded&lt;br /&gt;loop: module loaded&lt;br /&gt;dm9000 Ethernet Driver, V1.30&lt;br /&gt;eth0: dm9000 at c485e300,c4860304 IRQ 51 MAC: 08:00:3e:26:0a:5b (chip)&lt;br /&gt;Uniform Multi-Platform E-IDE driver&lt;br /&gt;ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx&lt;br /&gt;BAST NOR-Flash Driver, (c) 2004 Simtec Electronics&lt;br /&gt;S3C24XX NAND Driver, (c) 2004 Simtec Electronics&lt;br /&gt;s3c2440-nand s3c2440-nand: Tacls=1, 7ns Twrph0=4 30ns, Twrph1=1 7ns&lt;br /&gt;NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)&lt;br /&gt;Scanning device for bad blocks&lt;br /&gt;Creating 2 MTD partitions on "NAND 64MiB 3,3V 8-bit":&lt;br /&gt;0x00000000-0x00200000 : "Kernel"&lt;br /&gt;0x00200000-0x04000000 : "root partition"&lt;br /&gt;usbmon: debugfs is not available&lt;br /&gt;s3c2410-ohci s3c2410-ohci: S3C24XX OHCI&lt;br /&gt;s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1&lt;br /&gt;s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000&lt;br /&gt;usb usb1: configuration #1 chosen from 1 choice&lt;br /&gt;hub 1-0:1.0: USB hub found&lt;br /&gt;hub 1-0:1.0: 2 ports detected&lt;br /&gt;mice: PS/2 mouse device common for all mice&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;s3c2410 TouchScreen successfully loaded&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;input: s3c2410 TouchScreen as /class/input/input0&lt;/span&gt;&lt;br /&gt;S3C24XX RTC, (c) 2004,2006 Simtec Electronics&lt;br /&gt;s3c2440-i2c s3c2440-i2c: slave address 0x10&lt;br /&gt;s3c2440-i2c s3c2440-i2c: bus frequency set to 378 KHz&lt;br /&gt;s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter&lt;br /&gt;S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics&lt;br /&gt;s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled&lt;br /&gt;logger: created 64K log 'log_main'&lt;br /&gt;logger: created 64K log 'log_events'&lt;br /&gt;logger: created 64K log 'log_radio'&lt;br /&gt;TCP cubic registered&lt;br /&gt;NET: Registered protocol family 1&lt;br /&gt;RPC: Registered udp transport module.&lt;br /&gt;RPC: Registered tcp transport module.&lt;br /&gt;drivers/rtc/hctosys.c: unable to open rtc device (rtc0)&lt;br /&gt;eth0: link up, 100Mbps, full-duplex, lpa 0x45E1&lt;br /&gt;IP-Config: Complete:&lt;br /&gt;    device=eth0, addr=192.168.1.30, mask=255.255.255.0, gw=192.168.1.1,&lt;br /&gt;    host=android, domain=, nis-domain=(none),&lt;br /&gt;    bootserver=192.168.1.12, rootserver=192.168.1.12, rootpath=&lt;br /&gt;Looking up port of RPC 100003/2 on 192.168.1.12&lt;br /&gt;Looking up port of RPC 100005/1 on 192.168.1.12&lt;br /&gt;VFS: Mounted root (nfs filesystem).&lt;br /&gt;Freeing init memory: 144K&lt;br /&gt;--------mount /proc as proc&lt;br /&gt;--------mount /sys as sysfs&lt;br /&gt;--------mount /dev/shm as tmpfs&lt;br /&gt;init started: BusyBox v1.12.1 (2008-11-25 00:32:40 CST)&lt;br /&gt;starting pid 784, tty '': '/etc/rc.d/startup'&lt;br /&gt;--------start mdev&lt;br /&gt;--------mount tmpfs&lt;br /&gt;OK&lt;br /&gt;--------mount devpts&lt;br /&gt;OK&lt;br /&gt;Setting system clock: hwclock: can't open '/dev/misc/rtc': No such file or directory&lt;br /&gt;FAIL&lt;br /&gt;Setting hostname: OK&lt;br /&gt;Cleaning up system: OK&lt;br /&gt;Setting up interface lo: OK&lt;br /&gt;Running start scripts.&lt;br /&gt;Starting syslogd: syslogd: invalid number '80kb'&lt;br /&gt;FAIL&lt;br /&gt;Starting klogd: OK&lt;br /&gt;Setting up interface eth0: OK&lt;br /&gt;starting pid 805, tty '': '-/bin/login'&lt;br /&gt;android login: root&lt;br /&gt;Jan  1 00:00:18 login[805]: root login on 'console'&lt;br /&gt;EMB#&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-6299344487544119342?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nsjPWfYQSJ2rRXAUMxH37AHZu18/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nsjPWfYQSJ2rRXAUMxH37AHZu18/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nsjPWfYQSJ2rRXAUMxH37AHZu18/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nsjPWfYQSJ2rRXAUMxH37AHZu18/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/r4zkPznxQKs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/6299344487544119342/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=6299344487544119342" title="3 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6299344487544119342?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6299344487544119342?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/r4zkPznxQKs/touchscreen-driver-has-been-done-linux.html" title="TouchScreen driver has been done - 移植 Linux kernel 2.6.25 (Android 版本) 到 SAMSUNG S3C2440A" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/12/touchscreen-driver-has-been-done-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8ARHo-cCp7ImA9WxRUFkU.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-4202277809139788437</id><published>2008-11-26T15:11:00.002+08:00</published><updated>2008-11-26T15:17:25.458+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-26T15:17:25.458+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="移植" /><category scheme="http://www.blogger.com/atom/ns#" term="porting" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="嵌入式" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>File system 掛載成功 - 移植 Linux kernel 2.6.25 (Android 版本) 到 SAMSUNG S3C2440A</title><content type="html">　　之前 linux kernel 執行到&lt;br /&gt;&lt;br /&gt;Freeing init memory: 140K&lt;br /&gt;&lt;br /&gt;就停住了, 經測試之後, 發現是 cross-compiled gcc 的問題.&lt;br /&gt;&lt;br /&gt;　　SAMSUNG S3C2440A 的 ARM core 是 ARM920T, 所以重新建制 Generic arm, little endian 版本的 cross-compiled gcc, 問題就解決了.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下成功啟動 Linux 的過程:&lt;br /&gt;&lt;br /&gt;Starting kernel ...&lt;br /&gt;&lt;br /&gt;Uncompressing Linux........................................................................................................... done, booting the kernel.&lt;br /&gt;Linux version 2.6.25 (armdev@test.intra.wizign.com) (gcc version 4.1.2) #3 Tue Nov 25 01:55:06 CST 2008&lt;br /&gt;CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177&lt;br /&gt;Machine: SBZ2440&lt;br /&gt;Memory policy: ECC disabled, Data cache writeback&lt;br /&gt;CPU S3C2440A (id 0x32440001)&lt;br /&gt;S3C244X: core 399.651 MHz, memory 133.217 MHz, peripheral 66.608 MHz&lt;br /&gt;S3C24XX Clocks, (c) 2004 Simtec Electronics&lt;br /&gt;CLOCK: Slow mode (2.116 MHz), fast, MPLL on, UPLL on&lt;br /&gt;CPU0: D VIVT write-back cache&lt;br /&gt;CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets&lt;br /&gt;CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets&lt;br /&gt;Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256&lt;br /&gt;Kernel command line: root=/dev/nfs rw noinitrd console=ttySAC0,115200 init=/linuxrc nfsroot=192.168.1.12:/vdisk/armdev_fs ip=192.168.1.30:192.168.1.12:1&lt;br /&gt;92.168.1.1:255.255.255.0:android:eth0:off&lt;br /&gt;irq: clearing pending ext status 00000080&lt;br /&gt;irq: clearing subpending status 00000003&lt;br /&gt;irq: clearing subpending status 00000002&lt;br /&gt;PID hash table entries: 256 (order: 8, 1024 bytes)&lt;br /&gt;timer tcon=00500000, tcnt d8d2, tcfg 00000200,00000000, usec 0000170f&lt;br /&gt;Console: colour dummy device 80x30&lt;br /&gt;console [ttySAC0] enabled&lt;br /&gt;Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)&lt;br /&gt;Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;Memory: 64MB = 64MB total&lt;br /&gt;Memory: 61184KB available (3040K code, 507K data, 140K init)&lt;br /&gt;Mount-cache hash table entries: 512&lt;br /&gt;CPU: Testing write buffer coherency: ok&lt;br /&gt;net_namespace: 152 bytes&lt;br /&gt;NET: Registered protocol family 16&lt;br /&gt;S3C2410 Power Management, (c) 2004 Simtec Electronics&lt;br /&gt;S3C2440: Initialising architecture&lt;br /&gt;S3C2440: IRQ Support&lt;br /&gt;S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics&lt;br /&gt;DMA channel 0 at c4800000, irq 33&lt;br /&gt;DMA channel 1 at c4800040, irq 34&lt;br /&gt;DMA channel 2 at c4800080, irq 35&lt;br /&gt;DMA channel 3 at c48000c0, irq 36&lt;br /&gt;S3C244X: Clock Support, DVS off&lt;br /&gt;usbcore: registered new interface driver usbfs&lt;br /&gt;usbcore: registered new interface driver hub&lt;br /&gt;usbcore: registered new device driver usb&lt;br /&gt;NET: Registered protocol family 2&lt;br /&gt;IP route cache hash table entries: 1024 (order: 0, 4096 bytes)&lt;br /&gt;TCP established hash table entries: 2048 (order: 2, 16384 bytes)&lt;br /&gt;TCP bind hash table entries: 2048 (order: 1, 8192 bytes)&lt;br /&gt;TCP: Hash tables configured (established 2048 bind 2048)&lt;br /&gt;TCP reno registered&lt;br /&gt;NetWinder Floating Point Emulator V0.97 (double precision)&lt;br /&gt;JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.&lt;br /&gt;fuse init (API version 7.9)&lt;br /&gt;io scheduler noop registered&lt;br /&gt;io scheduler anticipatory registered (default)&lt;br /&gt;io scheduler deadline registered&lt;br /&gt;io scheduler cfq registered&lt;br /&gt;Console: switching to colour frame buffer device 30x40&lt;br /&gt;fb0: s3c2410fb frame buffer device&lt;br /&gt;lp: driver loaded but no devices found&lt;br /&gt;ppdev: user-space parallel port driver&lt;br /&gt;Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled&lt;br /&gt;s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440&lt;br /&gt;s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440&lt;br /&gt;s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440&lt;br /&gt;brd: module loaded&lt;br /&gt;loop: module loaded&lt;br /&gt;dm9000 Ethernet Driver, V1.30&lt;br /&gt;eth0: dm9000 at c485e300,c4860304 IRQ 51 MAC: 08:00:3e:26:0a:5b (chip)&lt;br /&gt;Uniform Multi-Platform E-IDE driver&lt;br /&gt;ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx&lt;br /&gt;BAST NOR-Flash Driver, (c) 2004 Simtec Electronics&lt;br /&gt;S3C24XX NAND Driver, (c) 2004 Simtec Electronics&lt;br /&gt;s3c2440-nand s3c2440-nand: Tacls=1, 7ns Twrph0=4 30ns, Twrph1=1 7ns&lt;br /&gt;NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)&lt;br /&gt;Scanning device for bad blocks&lt;br /&gt;Creating 2 MTD partitions on "NAND 64MiB 3,3V 8-bit":&lt;br /&gt;0x00000000-0x00200000 : "Kernel"&lt;br /&gt;0x00200000-0x04000000 : "root partition"&lt;br /&gt;usbmon: debugfs is not available&lt;br /&gt;s3c2410-ohci s3c2410-ohci: S3C24XX OHCI&lt;br /&gt;s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1&lt;br /&gt;s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000&lt;br /&gt;usb usb1: configuration #1 chosen from 1 choice&lt;br /&gt;hub 1-0:1.0: USB hub found&lt;br /&gt;hub 1-0:1.0: 2 ports detected&lt;br /&gt;mice: PS/2 mouse device common for all mice&lt;br /&gt;S3C24XX RTC, (c) 2004,2006 Simtec Electronics&lt;br /&gt;s3c2440-i2c s3c2440-i2c: slave address 0x10&lt;br /&gt;s3c2440-i2c s3c2440-i2c: bus frequency set to 378 KHz&lt;br /&gt;s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter&lt;br /&gt;S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics&lt;br /&gt;s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled&lt;br /&gt;logger: created 64K log 'log_main'&lt;br /&gt;logger: created 64K log 'log_events'&lt;br /&gt;logger: created 64K log 'log_radio'&lt;br /&gt;TCP cubic registered&lt;br /&gt;NET: Registered protocol family 1&lt;br /&gt;RPC: Registered udp transport module.&lt;br /&gt;RPC: Registered tcp transport module.&lt;br /&gt;drivers/rtc/hctosys.c: unable to open rtc device (rtc0)&lt;br /&gt;eth0: link up, 100Mbps, full-duplex, lpa 0x45E1&lt;br /&gt;IP-Config: Complete:&lt;br /&gt;     device=eth0, addr=192.168.1.30, mask=255.255.255.0, gw=192.168.1.1,&lt;br /&gt;     host=android, domain=, nis-domain=(none),&lt;br /&gt;     bootserver=192.168.1.12, rootserver=192.168.1.12, rootpath=&lt;br /&gt;Looking up port of RPC 100003/2 on 192.168.1.12&lt;br /&gt;Looking up port of RPC 100005/1 on 192.168.1.12&lt;br /&gt;VFS: Mounted root (nfs filesystem).&lt;br /&gt;Freeing init memory: 140K&lt;br /&gt;--------mount /proc as proc&lt;br /&gt;--------mount /sys as sysfs&lt;br /&gt;init started: BusyBox v1.12.1 (2008-11-25 00:32:40 CST)&lt;br /&gt;starting pid 777, tty '': '/etc/rc.d/startup'&lt;br /&gt;mkdir: cannot create directory '/dev/pts': File exists&lt;br /&gt;mkdir: cannot create directory '/dev/shm': File exists&lt;br /&gt;--------start mdev&lt;br /&gt;--------mount tmpfs&lt;br /&gt;OK&lt;br /&gt;--------mount devpts&lt;br /&gt;mount: mounting devpts on /dev/pts failed: No such file or directory&lt;br /&gt;FAIL&lt;br /&gt;Setting system clock: hwclock: can't open '/dev/misc/rtc': No such file or directory&lt;br /&gt;FAIL&lt;br /&gt;Setting hostname: OK&lt;br /&gt;Cleaning up system: OK&lt;br /&gt;Setting up interface lo: OK&lt;br /&gt;Running start scripts.&lt;br /&gt;Starting syslogd: syslogd: invalid number '80kb'&lt;br /&gt;FAIL&lt;br /&gt;Starting klogd: OK&lt;br /&gt;Setting up interface eth0: OK&lt;br /&gt;starting pid 800, tty '': '-/bin/login'&lt;br /&gt;android login: root&lt;br /&gt;ash: id -u: bad number&lt;br /&gt;# uname -a&lt;br /&gt;Linux android 2.6.25 #3 Tue Nov 25 01:55:06 CST 2008 armv4tl unknown&lt;br /&gt;# hostname&lt;br /&gt;android&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-4202277809139788437?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WkJ88x_xBTveSNOAjKTlcG2qGqw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WkJ88x_xBTveSNOAjKTlcG2qGqw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WkJ88x_xBTveSNOAjKTlcG2qGqw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WkJ88x_xBTveSNOAjKTlcG2qGqw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/ZUUlm8jv0pk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/4202277809139788437/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=4202277809139788437" title="6 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/4202277809139788437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/4202277809139788437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/ZUUlm8jv0pk/file-system-linux-kernel-2625-android.html" title="File system 掛載成功 - 移植 Linux kernel 2.6.25 (Android 版本) 到 SAMSUNG S3C2440A" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/11/file-system-linux-kernel-2625-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAMQ3c4eyp7ImA9WxRUFE0.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-1577068655533634015</id><published>2008-11-23T10:26:00.003+08:00</published><updated>2008-11-23T10:36:22.933+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-23T10:36:22.933+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="notes" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="筆記" /><title>Linux 筆記</title><content type="html">以下是整理的與 linux 相關的筆記:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/20080111-2OSs.pdf"&gt;安裝兩個 OS 在一部 PC 的方式&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-account.pdf"&gt;帳號管理&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-bash.pdf"&gt;Bash shell&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-disk.pdf"&gt;硬碟管理&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-filesystem.pdf"&gt;檔案系統架構&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-gcc.pdf"&gt;GCC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-gdb.pdf"&gt;GDB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-make.pdf"&gt;GNU make&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-network.pdf"&gt;網路管理&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-package.pdf"&gt;套件管理&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-vim.pdf"&gt;Vim 編輯器&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-xwin-fedoracore.pdf"&gt;Fedora 的視窗應用程式&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/compassfun/docs/linux-xwin-ubuntu.pdf"&gt;Ubuntu 的視窗應用程式&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-1577068655533634015?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8e63WcRy1ASZi68Y6hcDb2LnBO0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8e63WcRy1ASZi68Y6hcDb2LnBO0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8e63WcRy1ASZi68Y6hcDb2LnBO0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8e63WcRy1ASZi68Y6hcDb2LnBO0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/DV_ctHCgXX0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/1577068655533634015/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=1577068655533634015" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/1577068655533634015?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/1577068655533634015?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/DV_ctHCgXX0/linux.html" title="Linux 筆記" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/11/linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMCSX45fyp7ImA9WxRUEEs.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-2244901398772287092</id><published>2008-11-19T10:28:00.003+08:00</published><updated>2008-11-19T10:41:08.027+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-19T10:41:08.027+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="移植" /><category scheme="http://www.blogger.com/atom/ns#" term="SAMSUNG" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="S3C2440A" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>移植 Linux kernel 2.6.25 (Android 版本) 到 SAMSUNG S3C2440A</title><content type="html">有趣! 上次移植 android 到 TI Davinci DM355 沒成功.&lt;br /&gt;&lt;br /&gt;這次移植 android 到 SAMSUNG S3C2440A 的狀況還不錯!&lt;br /&gt;&lt;br /&gt;現在已經可以正常啟動 kernel, 接下來計畫進行的工作有:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;掛載檔案系統 (目前只能 ping 到 OS, 確定作業系統已經正常運作) &lt;/li&gt;&lt;li&gt;調整顯示介面和一些硬體驅動程式 &lt;/li&gt;&lt;li&gt;移植 Android 的作業環境和 demo APs &lt;/li&gt;&lt;li&gt;開發應用程式 &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;以下描述的建置過程只是基本設定, 對於調整的細節, 必須參考硬體開發板的相關規格作設定, 一些好的參考資料如下:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.chinaunix.net/u2/79779/showart_1217018.html"&gt;linux-2.6.26内核移植到S3C2440平台 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.chinaunix.net/u2/79779/showart_1216559.html"&gt;linux-2.6.25内核移植到S3C2440平台 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.csdn.net/yang_dk/archive/2008/04/17/2300712.aspx"&gt;移植内核2.6.24.4到S3C2440&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.csdn.net/zhang810413/archive/2008/02/08/2086984.aspx"&gt;《Linux系统移植》 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;移植過程簡述如下: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;硬體 SAMSUNG S3C2440A&lt;br /&gt;Linux kernel Android version 2.6.25.&lt;br /&gt;Cross compiled GCC 以及基本的作業系統建制, 請參考&lt;br /&gt;  &lt;a href="http://cross-lfs.org/view/clfs-embedded/arm/"&gt;Cross-Compiled Linux From Scratch - Embedded (Version SVN-0.0.1-20080109-arm)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Busybox-1.12.1 - 作業環境使用工作 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -jxvf ${ARMDEV}/sources/busybox-1.12.1.tar.bz2&lt;br /&gt;cd busybox-1.12.1&lt;br /&gt;patch -Np1 -i ../busybox-1.12.1-fixes-1.patch&lt;br /&gt;patch -Np1 -i ../busybox-1.12.1-iptunnel_headers-1.patch&lt;br /&gt;make defconfig&lt;br /&gt;&lt;br /&gt;BUSYBOX_OPTIONS="CONFIG_DMALLOC CONFIG_BUILD_AT_ONCE CONFIG_BUILD_LIBBUSYBOX&lt;br /&gt;    CONFIG_FEATURE_SH_IS_NONE CONFIG_LOCALE_SUPPORT CONFIG_TFTP CONFIG_FTPGET&lt;br /&gt;    CONFIG_FTPPUT CONFIG_IPCALC CONFIG_TFTP CONFIG_HUSH CONFIG_LASH&lt;br /&gt;    CONFIG_MSH CONFIG_INETD CONFIG_DPKG CONFIG_RPM2CPIO CONFIG_RPM&lt;br /&gt;    CONFIG_FOLD CONFIG_LOGNAME CONFIG_OD CONFIG_CRONTAB CONFIG_UUDECODE&lt;br /&gt;    CONFIG_UUENCODE CONFIG_SULOGIN CONFIG_DC CONFIG_DEBUG_YANK_SUSv2&lt;br /&gt;    CONFIG_DEBUG_INIT CONFIG_DEBUG_CROND_OPTION CONFIG_FEATURE_UDHCP_DEBUG&lt;br /&gt;    CONFIG_TASKSET CONFIG_CHATTR CONFIG_FSCK CONFIG_LSATTR CONFIG_CHPST&lt;br /&gt;    CONFIG_SETUIDGID CONFIG_ENVUIDGID CONFIG_ENVDIR CONFIG_SOFTLIMIT&lt;br /&gt;    CONFIG_FEATURE_2_4_MODULES"&lt;br /&gt;for config in $BUSYBOX_OPTIONS; do&lt;br /&gt;    cp .config{,.orig}&lt;br /&gt;    sed -e "s:${config}=y:${config}=n:" .config.orig &gt; .config&lt;br /&gt;done&lt;br /&gt;BUSYBOX_OPTIONS="CONFIG_FEATURE_SH_IS_ASH CONFIG_FEATURE_TRACEROUTE_VERBOSE CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE"&lt;br /&gt;for config in $BUSYBOX_OPTIONS; do&lt;br /&gt;    cp .config{,.orig}&lt;br /&gt;    sed -e "s:# ${config} is not set:${config}=y:" .config.orig &gt; .config&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;make ARCH=arm CROSS_COMPILE="${ARM_TARGET}-"&lt;br /&gt;make ARCH=arm CROSS_COMPILE="${ARM_TARGET}-" CONFIG_PREFIX="${ARMDEV}" install&lt;br /&gt;&lt;br /&gt;cp examples/depmod.pl ${ARMDEV}/cross-tools/bin&lt;br /&gt;chmod 755 ${ARMDEV}/cross-tools/bin/depmod.pl&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Ext2 - 檔案系統工具 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -zxvf ${ARMDEV}/sources/e2fsprogs-1.39.tar.gz&lt;br /&gt;cd e2fsprogs-1.39&lt;br /&gt;mkdir -v build&lt;br /&gt;cd build&lt;br /&gt;CC="${CC} -Os" ../configure --build=${ARM_HOST} --host=${ARM_TARGET} --prefix=/usr --with-root-prefix="" --with-cc="${CC} -Os" --with-linker=${LD}&lt;br /&gt;make&lt;br /&gt;make DESTDIR=${ARMDEV} install&lt;br /&gt;make DESTDIR=${ARMDEV} install-libs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Iana-Etc-2.20 - 網路服務和通訊協定 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -jxvf ${ARMDEV}/sources/iana-etc-2.20.tar.bz2&lt;br /&gt;cd iana-etc-2.20&lt;br /&gt;make&lt;br /&gt;make DESTDIR=${ARMDEV} install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Zlib-1.2.3 0 - 壓縮和解壓縮程式 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -zxvf ${ARMDEV}/sources/zlib-1.2.3.tar.gz&lt;br /&gt;cd zlib-1.2.3&lt;br /&gt;patch -Np1 -i ${ARMDEV}/sources/zlib-1.2.3-DESTDIR-1.patch&lt;br /&gt;cp configure{,.orig}&lt;br /&gt;sed -e 's/-O3/-Os/g' configure.orig &gt; configure&lt;br /&gt;&lt;br /&gt;CC="${CC}" ./configure --prefix=/usr --shared&lt;br /&gt;make&lt;br /&gt;make DESTDIR=${ARMDEV} install&lt;br /&gt;mv -v ${ARMDEV}/usr/lib/libz.so.* ${ARMDEV}/lib&lt;br /&gt;ln -svf ../../lib/libz.so.1 ${ARMDEV}/usr/lib/libz.so&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() 建立密碼保護機制 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;echo "Create /etc/shadow file"&lt;br /&gt;cat &gt; ${ARMDEV}/etc/shadow &lt;&lt; "EOF"&lt;br /&gt;root:$1$BQY1.ACn$rvcsFmggQFH.jyCD/X/NV1:13553:0:99999:7:::&lt;br /&gt;bin:x:13553:0:99999:7:::&lt;br /&gt;daemon:x:13553:0:99999:7:::&lt;br /&gt;adm:x:13553:0:99999:7:::&lt;br /&gt;lp:x:13553:0:99999:7:::&lt;br /&gt;mail:x:13553:0:99999:7:::&lt;br /&gt;news:x:13553:0:99999:7:::&lt;br /&gt;uucp:x:13553:0:99999:7:::&lt;br /&gt;operator:x:13553:0:99999:7:::&lt;br /&gt;postmaster:x:13553:0:99999:7:::&lt;br /&gt;nobody:x:13553:0:99999:7:::&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() cramfs-1.1 - 建立 file system 的工具 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -zxvf ${ARMDEV}/sources/cramfs-1.1.tar.gz&lt;br /&gt;cd cramfs-1.1&lt;br /&gt;make&lt;br /&gt;&lt;br /&gt;$ su&lt;br /&gt;# cp mkcramfs /usr/bin&lt;br /&gt;# cp cramfsck /usr/bin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() JFFS2 - 管理 Flash 記憶體的 file system  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/sources&lt;br /&gt;cvs -d :pserver:anoncvs@cvs.infradead.org:/home/cvs login    #password: anoncvs&lt;br /&gt;cvs -d :pserver:anoncvs@cvs.infradead.org:/home/cvs co mtd&lt;br /&gt;cd mtd/util/&lt;br /&gt;make clean&lt;br /&gt;make&lt;br /&gt;cp mkfs.jffs /sbin&lt;br /&gt;cp mkfs.jffs2 /sbin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /etc/fstab &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/fstab &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/fstab&lt;br /&gt;&lt;br /&gt;# Help information&lt;br /&gt;# man 5 fstab&lt;br /&gt;&lt;br /&gt;# file system        mount-point    type        options            dump    fsck&lt;br /&gt;#                                                         order&lt;br /&gt;&lt;br /&gt;/dev/ram                /                            ext2            defaults        1        1&lt;br /&gt;proc                        /proc                    proc            defaults        0        0&lt;br /&gt;sysfs                        /sys                        sysfs            defaults        0        0&lt;br /&gt;devpts                    /dev/pts                devpts        gid=4,mode=620    0        0&lt;br /&gt;shm                        /dev/shm            tmpfs            defaults        0        0&lt;br /&gt;none                        /proc/bus/usb    usbdevfs    defaults        0        0&lt;br /&gt;&lt;br /&gt;# End /etc/fstab&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Linux-2.6.25 (android version) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -jxvf ${ARMDEV}/sources/linux-2.6.25-android-1.0_r1.tar.gz&lt;br /&gt;mv kernel.git linux-android-2.6.25&lt;br /&gt;cd linux-android-2.6.25&lt;br /&gt;make mrproper&lt;br /&gt;&lt;br /&gt;make ARCH=arm CROSS_COMPILE=${ARM_TARGET}- s3c2410_defconfig&lt;br /&gt;make ARCH=arm CROSS_COMPILE=${ARM_TARGET}- gconfig&lt;br /&gt;&lt;br /&gt;  以下的設定只適合本人的開發板, 僅提供參考&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Device Drivers&lt;br /&gt;  Block Devices                                                                    BLK_DEV&lt;br /&gt;    RAM block device support                                                BLK_DEV_RAM&lt;br /&gt;    (2) Default number of RAM disks                                    BLK_DEV_RAM_COUNT&lt;br /&gt;    (41984) Default RAM disk size (kbytes)                        BLK_DEV_RAM_SIZE&lt;br /&gt;    (1024) Default RAM disk block size (bytes)                BLK_DEV_RAM_BLOCKSIZE&lt;br /&gt;&lt;br /&gt;File systems&lt;br /&gt;  Kernel automounter support                                            AUTOFS_FS&lt;br /&gt;  kernel automounter version 4 support                            AUTOFS4_FS&lt;br /&gt;  Filesystem in Userspace support                                    FUSE_FS&lt;br /&gt;  Pseudo filesystems &lt;br /&gt;    /dev/ file system support                                                DEVFS_FS&lt;br /&gt;    Virtual memory file system support (former shm fs)    TMPFS&lt;br /&gt;    Userspace-driven configuration filesystem                CONFIGFS_FS&lt;br /&gt;  Miscellaneous filesystems &lt;br /&gt;    YAFFS2 file system support                                            YAFFS_FS&lt;br /&gt;    512 byte / page devices                                                YAFFS_YAFFS1&lt;br /&gt;    2048 byte / page devices                                                YAFFS_YAFFS2&lt;br /&gt;  Network File Systems                                                        NETWORK_FILESYSTEMS&lt;br /&gt;    NFS file system support                                                    NFS_FS&lt;br /&gt;        Provide NFSv3 client support                                    NFS_V3&lt;br /&gt;    Root file system on NFS                                                    ROOT_NFS&lt;br /&gt;  Journalling Flash File System v2 (JFFS2) support            JFFS2_FS&lt;br /&gt;    JFFS2 debugging verbosity (0 = quiet, 2 = noisy)        JFFS2_FS_DEBUG&lt;br /&gt;    JFFS2 write-buffering support                                        JFFS2_FS_WRITEBUFFER&lt;br /&gt;    Advanced compression options for JFFS2                    JFFS2_COMPRESSION_OPTIONS&lt;br /&gt;      JFFS2 ZLIB compression support                                JFFS2_ZLIB&lt;br /&gt;      JFFS2 RTIME compression support                                JFFS2_RTIME&lt;br /&gt;      JFFS2 RUBIN compression support                                JFFS2_RUBIN&lt;br /&gt;&lt;br /&gt;Boot options&lt;br /&gt;  Default kernel command string                                        CMDLINE            {command}&lt;br /&gt;{command}&lt;br /&gt;root=/dev/hda1 rw rootfstype=cramfs noinitrd init=/linuxrc console=ttySAC0,115200 mem=64M&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /linuxrc &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}&lt;br /&gt;mv linuxrc linuxrc.busybox&lt;br /&gt;cat &gt; ${ARMDEV}/linuxrc &lt;&lt; "EOF"&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;echo "mount /etc as ramfs"&lt;br /&gt;/bin/mount -n -t ramfs ramfs /etc&lt;br /&gt;/bin/cp -a /mnt/etc/* /etc&lt;br /&gt;&lt;br /&gt;# re-create the /etc/mtab entries&lt;br /&gt;echo "re-create the /etc/mtab entries"&lt;br /&gt;/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock1 /&lt;br /&gt;&lt;br /&gt;# mount some file system&lt;br /&gt;echo "--------munt /dev/shm as tmpfs"&lt;br /&gt;/bin/mount -n -t tmpfs tmpfs /dev/shm&lt;br /&gt;&lt;br /&gt;# mount /proc as proc file system&lt;br /&gt;echo "--------mount /proc as proc"&lt;br /&gt;/bin/mount -n -t proc none /proc&lt;br /&gt;&lt;br /&gt;# mount /sys as sysfs file system&lt;br /&gt;echo "--------mount /sys as sysfs&lt;br /&gt;/bin/mount -n -t sysfs none /sys&lt;br /&gt;&lt;br /&gt;#input command to LCD&lt;br /&gt;#sh &lt; /dev/ttyS0&lt;br /&gt;&lt;br /&gt;exec /sbin/init&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;chmod 775 ${ARMDEV}/linuxrc&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /etc/inetd.conf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/inetd.conf &lt;&lt; "EOF"&lt;br /&gt;# &lt;service_name&gt; &lt;sock_type&gt; &lt;proto&gt; &lt;flags&gt; &lt;user&gt; &lt;server_path&gt; &lt;args&gt;&lt;br /&gt;telnet           stream      tcp     nowait  root   /usr/sbin/telnetd&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() CLFS-Bootscripts-1.0-pre4 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd ${ARMDEV}/build&lt;br /&gt;tar -jxvf ${ARMDEV}/sources/clfs-embedded-bootscripts-1.0-pre4.tar.bz2&lt;br /&gt;cd clfs-embedded-bootscripts&lt;br /&gt;make DESTDIR=${ARMDEV} install&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /etc/mdev.conf &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/mdev.conf&lt;&lt; "EOF"&lt;br /&gt;# /etc/mdev/conf&lt;br /&gt;SLEEP=10&lt;br /&gt;&lt;br /&gt;# Symlinks:&lt;br /&gt;# Syntax: %s -&gt; %s&lt;br /&gt;&lt;br /&gt;MAKEDEV -&gt; ../sbin/MAKEDEV&lt;br /&gt;/proc/core -&gt; kcore&lt;br /&gt;fd -&gt; /proc/self/fd&lt;br /&gt;mcdx -&gt; mcdx0&lt;br /&gt;radio -&gt; radio0&lt;br /&gt;ram -&gt; ram1&lt;br /&gt;sbpcd -&gt; sbpcd0&lt;br /&gt;sr0 -&gt; scd0&lt;br /&gt;sr1 -&gt; scd1&lt;br /&gt;sr10 -&gt; scd10&lt;br /&gt;sr11 -&gt; scd11&lt;br /&gt;sr12 -&gt; scd12&lt;br /&gt;sr13 -&gt; scd13&lt;br /&gt;sr14 -&gt; scd14&lt;br /&gt;sr15 -&gt; scd15&lt;br /&gt;sr16 -&gt; scd16&lt;br /&gt;sr2 -&gt; scd2&lt;br /&gt;sr3 -&gt; scd3&lt;br /&gt;sr4 -&gt; scd4&lt;br /&gt;sr5 -&gt; scd5&lt;br /&gt;sr6 -&gt; scd6&lt;br /&gt;sr7 -&gt; scd7&lt;br /&gt;sr8 -&gt; scd8&lt;br /&gt;sr9 -&gt; scd9&lt;br /&gt;stderr -&gt; fd/2&lt;br /&gt;stdin -&gt; fd/0&lt;br /&gt;stdout -&gt; fd/1&lt;br /&gt;&lt;br /&gt;# Remove these devices, if using a headless system&lt;br /&gt;# You will see an error mdev: Bad line 35&lt;br /&gt;vbi -&gt; vbi0&lt;br /&gt;vcs -&gt; vcs0&lt;br /&gt;vcsa -&gt; vcsa0&lt;br /&gt;video -&gt; video0&lt;br /&gt;# Stop Remove for headless system&lt;br /&gt;&lt;br /&gt;# Devices:&lt;br /&gt;# Syntax: %s %d:%d %s&lt;br /&gt;# devices user:group mode&lt;br /&gt;&lt;br /&gt;null 0:0 777&lt;br /&gt;zero 0:0 666&lt;br /&gt;&lt;br /&gt;urandom 0:0 444&lt;br /&gt;&lt;br /&gt;console 0:5 0600&lt;br /&gt;fd0 0:11 0660&lt;br /&gt;hdc 0:6 0660&lt;br /&gt;kmem 0:9 000&lt;br /&gt;mem 0:9 0640&lt;br /&gt;port 0:9 0640&lt;br /&gt;ptmx 0:5 0660&lt;br /&gt;&lt;br /&gt;sda* 0:6 0660&lt;br /&gt;sdb* 0:6 0660&lt;br /&gt;hda* 0:6 0660&lt;br /&gt;hdb* 0:6 0660&lt;br /&gt;&lt;br /&gt;tty 0:5 0660&lt;br /&gt;tty0* 0:5 0660&lt;br /&gt;tty1* 0:5 0660&lt;br /&gt;tty2* 0:5 0660&lt;br /&gt;tty3* 0:5 0660&lt;br /&gt;tty4* 0:5 0660&lt;br /&gt;tty5* 0:5 0660&lt;br /&gt;tty6* 0:5 0660&lt;br /&gt;&lt;br /&gt;ttyS* 0:20 640&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /etc/profile &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/profile&lt;&lt; "EOF"&lt;br /&gt;# /etc/profile&lt;br /&gt;&lt;br /&gt;# Set the initial path&lt;br /&gt;export PATH=/bin:/usr/bin&lt;br /&gt;&lt;br /&gt;if [ 'id -u' -eq 0 ] ; then&lt;br /&gt;        PATH=/bin:/sbin:/usr/bin:/usr/sbin&lt;br /&gt;        unset HISTFILE&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# Setup some environment variables.&lt;br /&gt;export USER='id -un'&lt;br /&gt;export LOGNAME=$USER&lt;br /&gt;export HOSTNAME='/bin/hostname'&lt;br /&gt;export HISTSIZE=1000&lt;br /&gt;export HISTFILESIZE=1000&lt;br /&gt;export PAGER='/bin/more '&lt;br /&gt;export EDITOR='/bin/vi'&lt;br /&gt;export INPUTRC=/etc/inputrc&lt;br /&gt;&lt;br /&gt;# End /etc/profile&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Creating the /etc/inputrc File &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/inputrc &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/inputrc&lt;br /&gt;# Modified by Chris Lynn &lt;roryo@roryo.dynup.net&gt;&lt;br /&gt;&lt;br /&gt;# Allow the command prompt to wrap to the next line&lt;br /&gt;set horizontal-scroll-mode Off&lt;br /&gt;&lt;br /&gt;# Enable 8bit input&lt;br /&gt;set meta-flag On&lt;br /&gt;set input-meta On&lt;br /&gt;&lt;br /&gt;# Turns off 8th bit stripping&lt;br /&gt;set convert-meta Off&lt;br /&gt;&lt;br /&gt;# Keep the 8th bit for display&lt;br /&gt;set output-meta On&lt;br /&gt;&lt;br /&gt;# none, visible or audible&lt;br /&gt;set bell-style none&lt;br /&gt;&lt;br /&gt;# All of the following map the escape sequence of the&lt;br /&gt;# value contained inside the 1st argument to the&lt;br /&gt;# readline specific functions&lt;br /&gt;&lt;br /&gt;"\eOd": backward-word&lt;br /&gt;"\eOc": forward-word&lt;br /&gt;&lt;br /&gt;# for linux console&lt;br /&gt;"\e[1~": beginning-of-line&lt;br /&gt;"\e[4~": end-of-line&lt;br /&gt;"\e[5~": beginning-of-history&lt;br /&gt;"\e[6~": end-of-history&lt;br /&gt;"\e[3~": delete-char&lt;br /&gt;"\e[2~": quoted-insert&lt;br /&gt;&lt;br /&gt;# for xterm&lt;br /&gt;"\eOH": beginning-of-line&lt;br /&gt;"\eOF": end-of-line&lt;br /&gt;&lt;br /&gt;# for Konsole&lt;br /&gt;"\e[H": beginning-of-line&lt;br /&gt;"\e[F": end-of-line&lt;br /&gt;&lt;br /&gt;# End /etc/inputrc&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /etc/inittab &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/inittab&lt;&lt; "EOF"&lt;br /&gt;# /etc/inittab&lt;br /&gt;&lt;br /&gt;::sysinit:/etc/rc.d/startup&lt;br /&gt;&lt;br /&gt;::respawn:/usr/sbin/telnetd&lt;br /&gt;&lt;br /&gt;tty1::respawn:/sbin/getty 38400 tty1&lt;br /&gt;tty2::respawn:/sbin/getty 38400 tty2&lt;br /&gt;tty3::respawn:/sbin/getty 38400 tty3&lt;br /&gt;tty4::respawn:/sbin/getty 38400 tty4&lt;br /&gt;tty5::respawn:/sbin/getty 38400 tty5&lt;br /&gt;tty6::respawn:/sbin/getty 38400 tty6&lt;br /&gt;&lt;br /&gt;# Put a getty on the serial line (for a terminal)&lt;br /&gt;# uncomment this line if your using a serial console&lt;br /&gt;#::respawn:/sbin/getty -L ttyS0 115200 vt100&lt;br /&gt;::respawn:/sbin/getty -L ttySAC0 115200 vt100&lt;br /&gt;#T0:12345:respawn:/sbin/getty -n -l /usr/local/sbin/autologin -L /dev/tts/1 115200 vt100&lt;br /&gt;&lt;br /&gt;::shutdown:/etc/rc.d/shutdown&lt;br /&gt;::ctrlaltdel:/sbin/reboot&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Setting Hostname &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;echo "android" &gt; ${ARMDEV}/etc/HOSTNAME&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() /etc/hosts File &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Has network card&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/hosts &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/hosts (network card version)&lt;br /&gt;&lt;br /&gt;127.0.0.1 localhost&lt;br /&gt;192.168.1.30 android.wizign.com android&lt;br /&gt;&lt;br /&gt;# End /etc/hosts (network card version)&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;  Without network card&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/hosts &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/hosts (no network card version)&lt;br /&gt;&lt;br /&gt;127.0.0.1 dpf-dev.wizign.com dpf-dev localhost&lt;br /&gt;&lt;br /&gt;# End /etc/hosts (no network card version)&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Configuring the network Script &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/network.conf &lt;&lt; "EOF"&lt;br /&gt;# /etc/network.conf&lt;br /&gt;# Global Networking Configuration&lt;br /&gt;# interface configuration is in /etc/network.d/&lt;br /&gt;&lt;br /&gt;# set to yes to enable networking&lt;br /&gt;NETWORKING=yes&lt;br /&gt;&lt;br /&gt;# set to yes to set default route to gateway&lt;br /&gt;USE_GATEWAY=no&lt;br /&gt;&lt;br /&gt;# set to gateway IP address&lt;br /&gt;GATEWAY=192.168.1.1&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() creates a sample interface.eth0  file for the eth0 device: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mkdir ${ARMDEV}/etc/network.d &amp;amp;&amp;amp;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/network.d/interface.eth0 &lt;&lt; "EOF"&lt;br /&gt;# Network Interface Configuration&lt;br /&gt;&lt;br /&gt;# network device name&lt;br /&gt;INTERFACE=eth0&lt;br /&gt;&lt;br /&gt;# set to yes to use DHCP instead of the settings below&lt;br /&gt;DHCP=no&lt;br /&gt;&lt;br /&gt;# IP address&lt;br /&gt;IPADDRESS=192.168.1.30&lt;br /&gt;&lt;br /&gt;# netmask&lt;br /&gt;NETMASK=255.255.255.0&lt;br /&gt;&lt;br /&gt;# broadcast address&lt;br /&gt;BROADCAST=192.168.1.255&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() Creating the ${ARMDEV}/etc/resolv.conf File &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; ${ARMDEV}/etc/resolv.conf &lt;&lt; "EOF"&lt;br /&gt;# Begin /etc/resolv.conf&lt;br /&gt;&lt;br /&gt;domain wizign.com&lt;br /&gt;nameserver 168.95.1.1&lt;br /&gt;nameserver 168.95.192.1&lt;br /&gt;&lt;br /&gt;# End /etc/resolv.conf&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() 複製乾淨的作業系統, 準備移植到開發板 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;su -&lt;br /&gt;&lt;br /&gt;if [ ! -d /mnt/armdev_fs ]; then&lt;br /&gt;    mkdir /mnt/armdev_fs&lt;br /&gt;fi&lt;br /&gt;mount --bind /vdisk/armdev_fs /mnt/armdev_fs&lt;br /&gt;&lt;br /&gt;export ARMDEV="/mnt/armdev"&lt;br /&gt;export ARMDEV_FS="/mnt/armdev_fs"&lt;br /&gt;&lt;br /&gt;for dir in $(ls "${ARMDEV}"); do&lt;br /&gt;    if [ "$dir" == 'sources' ]; then&lt;br /&gt;        echo "Skip $dir"&lt;br /&gt;    elif [ "$dir" == 'build' ]; then&lt;br /&gt;        echo "Skip $dir"&lt;br /&gt;    elif [ "$dir" == 'cross-tools' ]; then&lt;br /&gt;        echo "Skip $dir"&lt;br /&gt;    else&lt;br /&gt;        cp -avr ""${ARMDEV}"/$dir" "${ARMDEV_FS}/."&lt;br /&gt;    fi&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;rm -rfv ${ARMDEV_FS}/usr/src/*&lt;br /&gt;rm -rfv ${ARMDEV_FS}/usr/include&lt;br /&gt;rm -rfv ${ARMDEV_FS}/usr/man&lt;br /&gt;rm -rfv ${ARMDEV_FS}/usr/share/man&lt;br /&gt;&lt;br /&gt;FILES="'ls ${ARMDEV_FS}/lib/*.a ${ARMDEV_FS}/usr/lib/*.a'"&lt;br /&gt;for file in $FILES; do&lt;br /&gt;    rm -fv $file&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;chown -Rv root:root ${ARMDEV_FS}&lt;br /&gt;chgrp -v utmp ${ARMDEV_FS}/var/run/utmp ${ARMDEV_FS}/var/log/lastlog&lt;br /&gt;mknod -m 0666 ${ARMDEV_FS}/dev/null c 1 3&lt;br /&gt;mknod -m 0600 ${ARMDEV_FS}/dev/console c 5 1&lt;br /&gt;&lt;br /&gt;  如果是用 cramfs&lt;br /&gt;mkcramfs ${ARMDEV_FS} /mnt/rootfs.cramfs&lt;br /&gt;cp /mnt/rootfs.cramfs /var/lib/tftpboot/ramdisk-android-2.6.25.cramfs&lt;br /&gt;&lt;br /&gt;  如果是用 jffs2&lt;br /&gt;mkfs.jffs2 -d ${ARMDEV_FS} -p -s 0x200 -e 0x4000 -n -l -U -o ramdisk.jffs2&lt;br /&gt;cp /mnt/ramdisk.jffs2 /var/lib/tftpboot/ramdisk-android-2.6.25.jffs2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() 以下是 shell script 檔案, 用來建 RAM disk &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cat &gt; /mnt/mkramdisk.sh &lt;&lt; "EOF"&lt;br /&gt;#! /bin/bash&lt;br /&gt;&lt;br /&gt;# Remove files&lt;br /&gt;echo "remove files"&lt;br /&gt;rm -f ramdisk.img.gz&lt;br /&gt;rm -f ramdisk32.img&lt;br /&gt;rm -f ramdisk.img&lt;br /&gt;rm -fr ramdisk&lt;br /&gt;&lt;br /&gt;# Create ramdisk32&lt;br /&gt;echo "create ramdisk32"&lt;br /&gt;cd /mnt&lt;br /&gt;dd if=/dev/zero of=ramdisk32.img bs=1024 count=40960&lt;br /&gt;mke2fs -F -vm0 ramdisk32.img&lt;br /&gt;mkdir ramdisk&lt;br /&gt;mount -o loop ramdisk32.img ramdisk&lt;br /&gt;cd ramdisk/&lt;br /&gt;cp -arv ${ARMDEV_FS}/* .&lt;br /&gt;cd ..&lt;br /&gt;umount ramdisk&lt;br /&gt;&lt;br /&gt;# Make ram disk image&lt;br /&gt;echo "make ram disk image"&lt;br /&gt;cp ramdisk32.img ramdisk.img&lt;br /&gt;gzip ramdisk.img&lt;br /&gt;./mkimage -A arm -O linux -T ramdisk -C gzip -a 30080000 -e 30080000 -d ramdisk.img.gz -n 'SBZ2440 Ramdisk' ram.img&lt;br /&gt;&lt;br /&gt;# copy files&lt;br /&gt;echo "Copy RAM disk file"&lt;br /&gt;cp ram.img /var/lib/tftpboot/ramdisk-android-2.6.25.s&lt;br /&gt;echo "Copy uImage file"&lt;br /&gt;cp ${ARMDEV}/build/linux-android-2.6.25/arch/arm/boot/uImage /var/lib/tftpboot/uImage-android-s3c2440&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() 目前系統啟動的內容如下: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Starting kernel ...&lt;br /&gt;&lt;br /&gt;Uncompressing Linux........................................................................................................... done, booting the kerne.&lt;br /&gt;Linux version 2.6.25 (armdev@test.intra.wizign.com) (gcc version 4.1.2) #54 Wed Nov 19 09:19:00 CST 2008&lt;br /&gt;CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177&lt;br /&gt;Machine: SBZ2440&lt;br /&gt;Memory policy: ECC disabled, Data cache writeback&lt;br /&gt;CPU S3C2440A (id 0x32440001)&lt;br /&gt;S3C244X: core 399.651 MHz, memory 133.217 MHz, peripheral 66.608 MHz&lt;br /&gt;S3C24XX Clocks, (c) 2004 Simtec Electronics&lt;br /&gt;CLOCK: Slow mode (2.116 MHz), fast, MPLL on, UPLL on&lt;br /&gt;CPU0: D VIVT write-back cache&lt;br /&gt;CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets&lt;br /&gt;CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets&lt;br /&gt;Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256&lt;br /&gt;Kernel command line: root=/dev/nfs rw noinitrd console=ttySAC0,115200 init=/linuxrc nfsroot=192.168.1.12:/vdisk/armdev_fs ip=192.168.1.30:192.168.1.12f&lt;br /&gt;irq: clearing pending ext status 00000080&lt;br /&gt;irq: clearing subpending status 00000003&lt;br /&gt;irq: clearing subpending status 00000002&lt;br /&gt;PID hash table entries: 256 (order: 8, 1024 bytes)&lt;br /&gt;timer tcon=00500000, tcnt d8d2, tcfg 00000200,00000000, usec 0000170f&lt;br /&gt;Console: colour dummy device 80x30&lt;br /&gt;console [ttySAC0] enabled&lt;br /&gt;Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)&lt;br /&gt;Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;Memory: 64MB = 64MB total&lt;br /&gt;Memory: 61184KB available (3040K code, 507K data, 144K init)&lt;br /&gt;Mount-cache hash table entries: 512&lt;br /&gt;CPU: Testing write buffer coherency: ok&lt;br /&gt;net_namespace: 152 bytes&lt;br /&gt;NET: Registered protocol family 16&lt;br /&gt;S3C2410 Power Management, (c) 2004 Simtec Electronics&lt;br /&gt;S3C2440: Initialising architecture&lt;br /&gt;S3C2440: IRQ Support&lt;br /&gt;S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics&lt;br /&gt;DMA channel 0 at c4800000, irq 33&lt;br /&gt;DMA channel 1 at c4800040, irq 34&lt;br /&gt;DMA channel 2 at c4800080, irq 35&lt;br /&gt;DMA channel 3 at c48000c0, irq 36&lt;br /&gt;S3C244X: Clock Support, DVS off&lt;br /&gt;usbcore: registered new interface driver usbfs&lt;br /&gt;usbcore: registered new interface driver hub&lt;br /&gt;usbcore: registered new device driver usb&lt;br /&gt;NET: Registered protocol family 2&lt;br /&gt;IP route cache hash table entries: 1024 (order: 0, 4096 bytes)&lt;br /&gt;TCP established hash table entries: 2048 (order: 2, 16384 bytes)&lt;br /&gt;TCP bind hash table entries: 2048 (order: 1, 8192 bytes)&lt;br /&gt;TCP: Hash tables configured (established 2048 bind 2048)&lt;br /&gt;TCP reno registered&lt;br /&gt;NetWinder Floating Point Emulator V0.97 (double precision)&lt;br /&gt;JFFS2 version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.&lt;br /&gt;fuse init (API version 7.9)&lt;br /&gt;io scheduler noop registered&lt;br /&gt;io scheduler anticipatory registered (default)&lt;br /&gt;io scheduler deadline registered&lt;br /&gt;io scheduler cfq registered&lt;br /&gt;Console: switching to colour frame buffer device 30x40&lt;br /&gt;fb0: s3c2410fb frame buffer device&lt;br /&gt;lp: driver loaded but no devices found&lt;br /&gt;ppdev: user-space parallel port driver&lt;br /&gt;Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled&lt;br /&gt;s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440&lt;br /&gt;s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440&lt;br /&gt;s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440&lt;br /&gt;brd: module loaded&lt;br /&gt;loop: module loaded&lt;br /&gt;dm9000 Ethernet Driver, V1.30&lt;br /&gt;eth0: dm9000 at c485e300,c4860304 IRQ 51 MAC: 08:00:3e:26:0a:5b (chip)&lt;br /&gt;Uniform Multi-Platform E-IDE driver&lt;br /&gt;ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx&lt;br /&gt;BAST NOR-Flash Driver, (c) 2004 Simtec Electronics&lt;br /&gt;S3C24XX NAND Driver, (c) 2004 Simtec Electronics&lt;br /&gt;s3c2440-nand s3c2440-nand: Tacls=3, 22ns Twrph0=8 60ns, Twrph1=3 22ns&lt;br /&gt;NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)&lt;br /&gt;Scanning device for bad blocks&lt;br /&gt;Creating 2 MTD partitions on "NAND 64MiB 3,3V 8-bit":&lt;br /&gt;0x00000000-0x00200000 : "Kernel"&lt;br /&gt;0x00200000-0x04000000 : "root partition"&lt;br /&gt;usbmon: debugfs is not available&lt;br /&gt;s3c2410-ohci s3c2410-ohci: S3C24XX OHCI&lt;br /&gt;s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1&lt;br /&gt;s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000&lt;br /&gt;usb usb1: configuration #1 chosen from 1 choice&lt;br /&gt;hub 1-0:1.0: USB hub found&lt;br /&gt;hub 1-0:1.0: 2 ports detected&lt;br /&gt;mice: PS/2 mouse device common for all mice&lt;br /&gt;S3C24XX RTC, (c) 2004,2006 Simtec Electronics&lt;br /&gt;s3c2440-i2c s3c2440-i2c: slave address 0x10&lt;br /&gt;s3c2440-i2c s3c2440-i2c: bus frequency set to 378 KHz&lt;br /&gt;s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter&lt;br /&gt;S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics&lt;br /&gt;s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled&lt;br /&gt;logger: created 64K log 'log_main'&lt;br /&gt;logger: created 64K log 'log_events'&lt;br /&gt;logger: created 64K log 'log_radio'&lt;br /&gt;TCP cubic registered&lt;br /&gt;NET: Registered protocol family 1&lt;br /&gt;RPC: Registered udp transport module.&lt;br /&gt;RPC: Registered tcp transport module.&lt;br /&gt;drivers/rtc/hctosys.c: unable to open rtc device (rtc0)&lt;br /&gt;eth0: link up, 100Mbps, full-duplex, lpa 0x45E1&lt;br /&gt;IP-Config: Complete:&lt;br /&gt;     device=eth0, addr=192.168.1.30, mask=255.255.255.0, gw=192.168.1.1,&lt;br /&gt;     host=Android, domain=, nis-domain=(none),&lt;br /&gt;     bootserver=192.168.1.12, rootserver=192.168.1.12, rootpath=&lt;br /&gt;prepare_namespace() - start&lt;br /&gt;        mount_root()&lt;br /&gt;Looking up port of RPC 100003/2 on 192.168.1.12&lt;br /&gt;Looking up port of RPC 100005/1 on 192.168.1.12&lt;br /&gt;VFS: Mounted root (nfs filesystem).&lt;br /&gt;prepare_namespace() - end&lt;br /&gt;Freeing init memory: 144K&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;() 用 ping 測試系統是否已經啟動 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;$ ping 192.168.1.30&lt;br /&gt;PING 192.168.1.30 (192.168.1.30) 56(84) bytes of data.&lt;br /&gt;64 bytes from 192.168.1.30: icmp_seq=1 ttl=64 time=0.417 ms&lt;br /&gt;64 bytes from 192.168.1.30: icmp_seq=2 ttl=64 time=0.384 ms&lt;br /&gt;64 bytes from 192.168.1.30: icmp_seq=3 ttl=64 time=0.381 ms&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-2244901398772287092?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M2uY16FmhjULCv2jzlpm25XR6tg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M2uY16FmhjULCv2jzlpm25XR6tg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M2uY16FmhjULCv2jzlpm25XR6tg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M2uY16FmhjULCv2jzlpm25XR6tg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/LjhpQ5Dk-qQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/2244901398772287092/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=2244901398772287092" title="9 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2244901398772287092?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2244901398772287092?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/LjhpQ5Dk-qQ/linux-kernel-2625-android-samsung.html" title="移植 Linux kernel 2.6.25 (Android 版本) 到 SAMSUNG S3C2440A" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>9</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/11/linux-kernel-2625-android-samsung.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ADRHwyfSp7ImA9WxRVFkU.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-5036529181694090236</id><published>2008-11-15T00:32:00.000+08:00</published><updated>2008-11-15T00:56:15.295+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-15T00:56:15.295+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="editor" /><category scheme="http://www.blogger.com/atom/ns#" term="cscope" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="source" /><category scheme="http://www.blogger.com/atom/ns#" term="kscope" /><title>Source code editor - kscope</title><content type="html">如果不習慣 emacs 的操作方式, 可以選擇 kscope 視窗程式來進行 source code 的編輯.&lt;br /&gt;&lt;a href="http://kscope.sourceforge.net/"&gt;KScope&lt;/a&gt; 是 Cscope 在 KDE 環境下的 source code 編輯器&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;操作方式, 以下做簡略的說明:&lt;br /&gt;&lt;br /&gt;開啟 project:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opXISjAI/AAAAAAAAAEQ/d12TmFqwczg/s1600-h/20081114-kscope-project.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opXISjAI/AAAAAAAAAEQ/d12TmFqwczg/s320/20081114-kscope-project.gif" alt="" id="BLOGGER_PHOTO_ID_5268552570564771730" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;加入相關的 source code 列表 (選 tree button):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opm8bY1I/AAAAAAAAAEY/fb5WD-IaaS4/s1600-h/20081114-kscope-addfiles.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opm8bY1I/AAAAAAAAAEY/fb5WD-IaaS4/s320/20081114-kscope-addfiles.gif" alt="" id="BLOGGER_PHOTO_ID_5268552571875451730" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;開啟所要編輯的 source code 檔案:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opiD7_5I/AAAAAAAAAEg/PHo9I3yaPQY/s1600-h/20081114-kscope-codeview.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opiD7_5I/AAAAAAAAAEg/PHo9I3yaPQY/s320/20081114-kscope-codeview.gif" alt="" id="BLOGGER_PHOTO_ID_5268552570564771730" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;尋找 function 的定義位置:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2op-xjAsI/AAAAAAAAAEo/yDExnRydM0A/s1600-h/20081114-kscope-search.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2op-xjAsI/AAAAAAAAAEo/yDExnRydM0A/s320/20081114-kscope-search.gif" alt="" id="BLOGGER_PHOTO_ID_5268552578272264898" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;用關聯圖顯示特定 function 和其他 functions 之間的呼叫和被呼叫關係&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2op_-77vI/AAAAAAAAAEw/qSeM0S9idhk/s1600-h/20081114-kscope-graph.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2op_-77vI/AAAAAAAAAEw/qSeM0S9idhk/s320/20081114-kscope-graph.gif" alt="" id="BLOGGER_PHOTO_ID_5268552578596859634" border="0" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;安裝 kscope 的方式如下:&lt;br /&gt;&lt;br /&gt;Fedora Core 9:&lt;br /&gt;&lt;br /&gt;# yum install kscope&lt;br /&gt;&lt;br /&gt;Ubuntu 8.10:&lt;br /&gt;&lt;br /&gt;# apt-get install kscope&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-5036529181694090236?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7G5TB64YOMsK8ciQ9cGuQ-VAsVM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7G5TB64YOMsK8ciQ9cGuQ-VAsVM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7G5TB64YOMsK8ciQ9cGuQ-VAsVM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7G5TB64YOMsK8ciQ9cGuQ-VAsVM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/4woDvU_tySo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/5036529181694090236/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=5036529181694090236" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/5036529181694090236?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/5036529181694090236?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/4woDvU_tySo/source-code-editor-kscope.html" title="Source code editor - kscope" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SR2opXISjAI/AAAAAAAAAEQ/d12TmFqwczg/s72-c/20081114-kscope-project.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/11/source-code-editor-kscope.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNQ3g-eip7ImA9WxRVFkU.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-5415407515399499755</id><published>2008-11-15T00:14:00.000+08:00</published><updated>2008-11-15T00:31:32.652+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-15T00:31:32.652+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="editor" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="source" /><category scheme="http://www.blogger.com/atom/ns#" term="emacs" /><category scheme="http://www.blogger.com/atom/ns#" term="ecb" /><title>Source code editor - emacs + ecb</title><content type="html">當要瀏覽, 搜尋, 和編輯像 linux kernel 這樣複雜龐大的 source code, 一般的編輯器並不是很理想. 好用的作法之ㄧ是使用 emacs + &lt;a href="http://ecb.sourceforge.net/"&gt;ECB&lt;/a&gt;(Emacs Code Browse)&lt;br /&gt;&lt;br /&gt;使用 ECB 可以提供以下的功能視窗:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;目錄樹的視窗&lt;/li&gt;&lt;li&gt;Source code 檔案列表的視窗&lt;/li&gt;&lt;li&gt;顯示目前開啟檔案的 functions, classes, method, 和 ....&lt;/li&gt;&lt;li&gt;開啟過檔案的歷史紀錄&lt;/li&gt;&lt;li&gt;以及一些便利的操作功能&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2mCsxoDBI/AAAAAAAAAEI/fYgdvrUiZIU/s1600-h/20081114-emacs-ecb.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 253px;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2mCsxoDBI/AAAAAAAAAEI/fYgdvrUiZIU/s320/20081114-emacs-ecb.gif" alt="" id="BLOGGER_PHOTO_ID_5268549704402603026" border="0" /&gt;&lt;/a&gt;  啟動的方式是在開啟 emacs 之後, 按{Alt+X} 鍵後, 用鍵盤輸入 ecb-activate{Enter},  接著開啟準備編輯的 source code 檔案, 就可以看到功能視窗的內容. 如下圖所示:&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;alt x=""&gt;&lt;enter&gt;    安裝 emacs 和 ecb 的方式如下:&lt;br /&gt;&lt;br /&gt;Fedora Core 9:&lt;br /&gt;&lt;br /&gt;# yum install emacs ecb&lt;br /&gt;&lt;br /&gt;Ubuntu 8.10:&lt;br /&gt;&lt;br /&gt;# apt-get install emacs ecb&lt;br /&gt;或者是&lt;br /&gt;# apt-get install emacs22 ecb&lt;br /&gt;&lt;br /&gt;如果是想安裝 emacs for MS Windows 的版本, 請到 &lt;a href="http://www.gnu.org/software/emacs/"&gt;emacs&lt;/a&gt; 網站下載檔案. 再到 ecb 的網站參考所需的相關設定即可.&lt;br /&gt;&lt;br /&gt;&lt;/enter&gt;&lt;/alt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-5415407515399499755?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kEurKM4YLHojzbsY-2yMzjh0xuU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kEurKM4YLHojzbsY-2yMzjh0xuU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kEurKM4YLHojzbsY-2yMzjh0xuU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kEurKM4YLHojzbsY-2yMzjh0xuU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/-p35BJ9tncg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/5415407515399499755/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=5415407515399499755" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/5415407515399499755?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/5415407515399499755?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/-p35BJ9tncg/source-code-editor-emacs-ecb.html" title="Source code editor - emacs + ecb" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SR2mCsxoDBI/AAAAAAAAAEI/fYgdvrUiZIU/s72-c/20081114-emacs-ecb.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/11/source-code-editor-emacs-ecb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QNQHw6eyp7ImA9WxRWGEg.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-5271253665958368855</id><published>2008-11-05T09:52:00.000+08:00</published><updated>2008-11-05T12:29:51.213+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-05T12:29:51.213+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TI" /><category scheme="http://www.blogger.com/atom/ns#" term="Davinci" /><category scheme="http://www.blogger.com/atom/ns#" term="porting" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="DM355" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Unfinished task - porting android linux-2.6.23 to TI Davinci DM355</title><content type="html">This is an unfinished task, I post it for sharing my experience of encountered problems while I am porting linux kernel to a new hardware device.&lt;br /&gt;&lt;br /&gt;Target device is TMS320DM355 DVEVM.&lt;br /&gt;The linux kernel is android version 2.6.23.&lt;br /&gt;Cross compiled GCC is built by myself, the study source is &lt;a href="http://cross-lfs.org/view/clfs-embedded/arm/"&gt;Cross-Compiled Linux From Scratch - Embedded&lt;/a&gt; (Version SVN-0.0.1-20080109-arm).&lt;br /&gt;&lt;br /&gt;A good reference document about porting linux kernel is "Porting the Linux Kernel to a New ARM Platform", Wookey and Tak-Shing, &lt;a href="http://www.aleph1.co.uk/"&gt;Aleph One&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The last encountered problem is that the kernel can not boot from DVEVM board, the display information is as following:&lt;br /&gt;&lt;br /&gt;2048 MiB&lt;br /&gt;In:    serial&lt;br /&gt;Out:   serial&lt;br /&gt;Err:   serial&lt;br /&gt;ARM Clock :- 216MHz&lt;br /&gt;DDR Clock :- 171MHz&lt;br /&gt;Hit any key to stop autoboot:  0&lt;br /&gt;BOOTP broadcast 1&lt;br /&gt;DHCP client bound to address 192.168.1.101&lt;br /&gt;TFTP from server 192.168.1.12; our IP address is 192.168.1.101&lt;br /&gt;Filename 'uImage-android'.&lt;br /&gt;Load address: 0x80700000&lt;br /&gt;Loading: #################################################################&lt;br /&gt;        #################################################################&lt;br /&gt;        #################################################################&lt;br /&gt;        #################################################################&lt;br /&gt;        #################################################################&lt;br /&gt;        ####################&lt;br /&gt;done&lt;br /&gt;Bytes transferred = 1764160 (1aeb40 hex)&lt;br /&gt;## Booting image at 80700000 ...&lt;br /&gt;  Image Name:   Linux-2.6.23&lt;br /&gt;  Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;  Data Size:    1764096 Bytes =  1.7 MB&lt;br /&gt;  Load Address: 80008000&lt;br /&gt;  Entry Point:  80008000&lt;br /&gt;  Verifying Checksum ... OK&lt;br /&gt;OK&lt;br /&gt;&lt;br /&gt;Starting kernel ...&lt;br /&gt;&lt;br /&gt;Uncompressing Linux.................................................................................................................. done, booting the kernel.&lt;br /&gt;&lt;br /&gt;After my basic analysis, it seems that it is related to the process of enabling the MMU, the dependent file is arch/arm/kernel/head.S; other possible files are arch/arm/mm/proc-arm926.S and arch/arm/mach-davinci/board-evm.c.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The most files that I have modified are listed as following:&lt;br /&gt;&lt;br /&gt;arch/arm/tools/mach-types&lt;br /&gt;arch/arm/Kconfig&lt;br /&gt;arch/arm/Makefile&lt;br /&gt;arch/arm/kernel/head.S&lt;br /&gt;arch/arm/kernel/head-common.S&lt;br /&gt;arch/arm/kernel/debug.S&lt;br /&gt;arch/arm/mm/Kconfig&lt;br /&gt;arch/arm/mach-davinci/Kconfig&lt;br /&gt;arch/arm/mach-davinci/Makefile&lt;br /&gt;arch/arm/mach-davinci/io.c&lt;br /&gt;arch/arm/mach-davinci/irq.c&lt;br /&gt;arch/arm/mach-davinci/time.c&lt;br /&gt;arch/arm/mach-davinci/clock.c&lt;br /&gt;arch/arm/mach-davinci/serial.c&lt;br /&gt;arch/arm/mach-davinci/gpio.c&lt;br /&gt;arch/arm/mach-davinci/psc.c&lt;br /&gt;arch/arm/mach-davinci/board-evm.c&lt;br /&gt;include/asm-arm/arch-davinci/&lt;br /&gt;include/asm-arm/arch-davinci/gpio.h&lt;br /&gt;include/asm-arm/arch-davinci/io.h&lt;br /&gt;include/asm-arm/arch-davinci/dma.h&lt;br /&gt;include/asm-arm/arch-davinci/memory.h&lt;br /&gt;include/asm-arm/arch-davinci/system.h&lt;br /&gt;include/asm-arm/arch-davinci/timex.h&lt;br /&gt;include/asm-arm/arch-davinci/hardware.h&lt;br /&gt;include/asm-arm/arch-davinci/cpu.h&lt;br /&gt;include/asm-arm/arch-davinci/uncompress.h&lt;br /&gt;include/asm-arm/mach/arch.h&lt;br /&gt;include/asm-arm/setup.h&lt;br /&gt;include/asm-arm/procinfo.h&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following context describes the modified source code in each files:&lt;br /&gt;&lt;br /&gt;### arch/arm/tools/mach-types ###&lt;br /&gt;&lt;br /&gt;# machine_is_xxx    CONFIG_xxxx        MACH_TYPE_xxx        number&lt;br /&gt;#&lt;br /&gt;anakin            ARCH_ANAKIN        ANAKIN            57&lt;br /&gt;davinci_dm355_evm    MACH_DAVINCI_DM355_EVM    DAVINCI_DM355_EVM    1381&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/Kconfig ###&lt;br /&gt;&lt;br /&gt;config LEDS&lt;br /&gt;&lt;br /&gt;  depends on ARCH_CDB89712 || ARCH_CO285 || ARCH_EBSA110 || \&lt;br /&gt;         ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \&lt;br /&gt;         ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \&lt;br /&gt;         ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \&lt;br /&gt;         ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \&lt;br /&gt;         ARCH_AT91 || MACH_TRIZEPS4 || ARCH_DAVINCI || \&lt;br /&gt;         ARCH_KS8695 || MACH_DAVINCI_EVM&lt;br /&gt;&lt;br /&gt;config LEDS_TIMER&lt;br /&gt;&lt;br /&gt;  bool "Timer LED" if (!ARCH_CDB89712 &amp;amp;&amp;amp; !ARCH_OMAP) || \&lt;br /&gt;              OMAP_OSK_MISTRAL || MACH_OMAP_H2 \&lt;br /&gt;              || MACH_OMAP_PERSEUS2 || MACH_DAVINCI_EVM&lt;br /&gt;  depends on LEDS || MACH_DAVINCI_EVM&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if PCMCIA || ARCH_CLPS7500 || ARCH_IOP32X || ARCH_IOP33X || ARCH_IXP4XX \&lt;br /&gt;  || ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \&lt;br /&gt;  || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE \&lt;br /&gt;  || ARCH_IXP23XX || ARCH_DAVINCI&lt;br /&gt;source "drivers/ide/Kconfig"&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/Makefile ###&lt;br /&gt;&lt;br /&gt;CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)&lt;br /&gt;&lt;br /&gt;machine-$(CONFIG_ARCH_DAVINCI)       := davinci&lt;br /&gt;&lt;br /&gt;#Default value&lt;br /&gt;head-y        := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o&lt;br /&gt;textofs-y    := 0x00008000&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/kernel/head.S ###&lt;br /&gt;&lt;br /&gt;/* line 81~93 */&lt;br /&gt;&lt;br /&gt;  .type    stext, %function&lt;br /&gt;ENTRY(stext)&lt;br /&gt;  msr    cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode&lt;br /&gt;                      @ and irqs disabled&lt;br /&gt;  mrc    p15, 0, r9, c0, c0        @ get processor id&lt;br /&gt;  bl    __lookup_processor_type        @ r5=procinfo r9=cpuid&lt;br /&gt;  movs    r10, r5                @ invalid processor (r5=0)?&lt;br /&gt;  beq    __error_p            @ yes, error 'p'&lt;br /&gt;  bl    __lookup_machine_type        @ r5=machinfo&lt;br /&gt;  movs    r8, r5                @ invalid machine (r5=0)?&lt;br /&gt;  beq    __error_a            @ yes, error 'a'&lt;br /&gt;  bl    __vet_atags&lt;br /&gt;  bl    __create_page_tables&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# comment&lt;br /&gt;__vet_atags:arch/arm/kernel/head-common.S&lt;br /&gt;__create_page_tables&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/kernel/head-common.S ###&lt;br /&gt;&lt;br /&gt;/* line 80~114 */&lt;br /&gt;&lt;br /&gt;  .type    __error_a, %function&lt;br /&gt;__error_a:&lt;br /&gt;#ifdef CONFIG_DEBUG_LL&lt;br /&gt;  mov    r4, r1                @ preserve machine ID&lt;br /&gt;  adr    r0, str_a1&lt;br /&gt;  bl    printascii&lt;br /&gt;  mov    r0, r4&lt;br /&gt;  bl    printhex8&lt;br /&gt;  adr    r0, str_a2&lt;br /&gt;  bl    printascii&lt;br /&gt;  adr    r3, 3f&lt;br /&gt;  ldmia    r3, {r4, r5, r6}        @ get machine desc list&lt;br /&gt;  sub    r4, r3, r4            @ get offset between virt&amp;amp;phys&lt;br /&gt;  add    r5, r5, r4            @ convert virt addresses to&lt;br /&gt;  add    r6, r6, r4            @ physical address space&lt;br /&gt;1:    ldr    r0, [r5, #MACHINFO_TYPE]    @ get machine type&lt;br /&gt;  bl    printhex8&lt;br /&gt;  mov    r0, #'\t'&lt;br /&gt;  bl    printch&lt;br /&gt;  ldr     r0, [r5, #MACHINFO_NAME]    @ get machine name&lt;br /&gt;  add    r0, r0, r4&lt;br /&gt;  bl    printascii&lt;br /&gt;  mov    r0, #'\n'&lt;br /&gt;  bl    printch&lt;br /&gt;  add    r5, r5, #SIZEOF_MACHINE_DESC    @ next machine_desc&lt;br /&gt;  cmp    r5, r6&lt;br /&gt;  blo    1b&lt;br /&gt;  adr    r0, str_a3&lt;br /&gt;  bl    printascii&lt;br /&gt;  b    __error&lt;br /&gt;str_a1:    .asciz    "\nError: unrecognized/unsupported machine ID (r1 = 0x"&lt;br /&gt;str_a2:    .asciz    ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n"&lt;br /&gt;str_a3:    .asciz    "\nPlease check your kernel config and/or bootloader.\n"&lt;br /&gt;  .align&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/kernel/debug.S ###&lt;br /&gt;&lt;br /&gt;Debug Serial Output&lt;br /&gt;addruart, rx        - Provide UART address in \rx&lt;br /&gt;senduart rd, rx    - Send character in \rd (@ address \rx)&lt;br /&gt;busyuart rd, rx    - Wait until UART is done sending&lt;br /&gt;waituart rd, rx    - Wait for Clear to Send&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mm/Kconfig ###&lt;br /&gt;&lt;br /&gt;# ARM926T&lt;br /&gt;config CPU_ARM926T&lt;br /&gt;  bool "Support ARM926T processor"&lt;br /&gt;  depends on ARCH_GOLDFISH || ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_NS9XXX || ARCH_DAVINCI&lt;br /&gt;  default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_NS9XXX || ARCH_DAVINCI&lt;br /&gt;  select CPU_32v5&lt;br /&gt;  select CPU_ABRT_EV5TJ&lt;br /&gt;  select CPU_CACHE_VIVT&lt;br /&gt;  select CPU_CP15_MMU&lt;br /&gt;  select CPU_COPY_V4WB if MMU&lt;br /&gt;  select CPU_TLB_V4WBI if MMU&lt;br /&gt;  select ARM_THUMB&lt;br /&gt;  help&lt;br /&gt;    This is a variant of the ARM920.  It has slightly different&lt;br /&gt;    instruction sequences for cache and TLB operations.  Curiously,&lt;br /&gt;    there is no documentation on it at the ARM corporate website.&lt;br /&gt;&lt;br /&gt;    Say Y if you want support for the ARM926T processor.&lt;br /&gt;    Otherwise, say N.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/Kconfig ###&lt;br /&gt;&lt;br /&gt;config ARCH_DAVINCI355&lt;br /&gt;  default n&lt;br /&gt;  bool "DaVinci DM355 based system"&lt;br /&gt;&lt;br /&gt;comment "DaVinci Board Type"&lt;br /&gt;&lt;br /&gt;config MACH_DAVINCI_EVM&lt;br /&gt;  bool "TI DaVinci EVM"&lt;br /&gt;  default y&lt;br /&gt;  depends on ARCH_DAVINCI644x&lt;br /&gt;  help&lt;br /&gt;    Configure this option to specify the whether the board used&lt;br /&gt;    for development is a DaVinci EVM&lt;br /&gt;&lt;br /&gt;config MACH_DAVINCI_DM355_EVM&lt;br /&gt;  bool "TI DM355 EVM"&lt;br /&gt;  default n&lt;br /&gt;  depends on ARCH_DAVINCI355&lt;br /&gt;  help&lt;br /&gt;    Configure this option to specify the whether the board used&lt;br /&gt;    for development is a DM355 EVM&lt;br /&gt;&lt;br /&gt;config DAVINCI_I2C_EXPANDER&lt;br /&gt;  bool "TI DaVinci I2C Expander"&lt;br /&gt;  default y&lt;br /&gt;  depends on ARCH_DAVINCI644x&lt;br /&gt;  select I2C_DAVINCI&lt;br /&gt;  help&lt;br /&gt;    Configure this option to specify whether the board used&lt;br /&gt;    has I2C exapnder with ATA, USB, CF.&lt;br /&gt;&lt;br /&gt;config DAVINCI_MCBSP&lt;br /&gt;  bool&lt;br /&gt;      prompt "DaVinci McBSP Driver" if SOUND_DAVINCI=n&lt;br /&gt;  depends on ARCH_DAVINCI&lt;br /&gt;  default SOUND_DAVINCI&lt;br /&gt;  ---help---&lt;br /&gt;  DaVinci McBSP driver.  Auto-enabled by DaVinci sound driver.&lt;br /&gt;&lt;br /&gt;comment "DaVinci Options"&lt;br /&gt;&lt;br /&gt;config DAVINCI_BLK_DEV_CF&lt;br /&gt;  bool "TI DaVinci CF Card Support"&lt;br /&gt;  default Y&lt;br /&gt;  depends on BLK_DEV_DAVINCI&lt;br /&gt;  help&lt;br /&gt;    Configure this option to enable CF Card support.&lt;br /&gt;&lt;br /&gt;config DM355_NAND_256KB_BLOCKS&lt;br /&gt;  bool "NAND chip installed on DM355 EVM has 256KB blocks"&lt;br /&gt;  default y&lt;br /&gt;  depends on MACH_DAVINCI_DM355_EVM&lt;br /&gt;  help&lt;br /&gt;    The boot firmware on the DM355 EVM assumes a default partition map&lt;br /&gt;    for NAND flash based on erase block offsets.  Thus, the partition map&lt;br /&gt;    varies based on the size of the erase blocks in the particular NAND&lt;br /&gt;    flash component installed on the board.  Answer Y here if the NAND&lt;br /&gt;    chip (e.g a 16 Gigabit Micron MT29F16G08QAA) installed on your board&lt;br /&gt;    has 256KB blocks.  Answer N here if the NAND chip (e.g. a 4 Gigabit&lt;br /&gt;    Micron MT29F4G08AAA) installed on your board has 128KB blocks.&lt;br /&gt;&lt;br /&gt;choice&lt;br /&gt;  prompt "Low-level debug console UART"&lt;br /&gt;  default DAVINCI_LL_DEBUG_UART0&lt;br /&gt;&lt;br /&gt;config DAVINCI_LL_DEBUG_UART0&lt;br /&gt;  bool "UART0"&lt;br /&gt;&lt;br /&gt;config DAVINCI_LL_DEBUG_UART1&lt;br /&gt;  bool "UART1"&lt;br /&gt;&lt;br /&gt;endchoice&lt;br /&gt;&lt;br /&gt;config DM355_SPI&lt;br /&gt;      bool "TI DM355 SPI device"&lt;br /&gt;      default y&lt;br /&gt;      help&lt;br /&gt;        Configure this option to specify whether the board used&lt;br /&gt;        has SPI device.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/Makefile ###&lt;br /&gt;&lt;br /&gt;# Common objects&lt;br /&gt;obj-y             := time.o irq.o clock.o serial.o io.o id.o psc.o gpio.o mux.o&lt;br /&gt;&lt;br /&gt;# Board specific&lt;br /&gt;# obj-$(CONFIG_MACH_DAVINCI_EVM)  += board-evm.o&lt;br /&gt;obj-$(CONFIG_MACH_DAVINCI_DM355_EVM)    += board-evm.o&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/io.c ###&lt;br /&gt;&lt;br /&gt;static struct map_desc davinci_io_desc[] __initdata = {&lt;br /&gt;  {&lt;br /&gt;      .virtual    = IO_VIRT,&lt;br /&gt;      .pfn        = __phys_to_pfn(IO_PHYS),&lt;br /&gt;      .length        = IO_SIZE,&lt;br /&gt;      .type        = MT_DEVICE&lt;br /&gt;  },&lt;br /&gt;  {&lt;br /&gt;      .virtual    = DAVINCI_IRAM_VIRT,&lt;br /&gt;      .pfn    = __phys_to_pfn(DAVINCI_IRAM_BASE),&lt;br /&gt;      .length        = SZ_16K,&lt;br /&gt;      .type        = MT_DEVICE&lt;br /&gt;  },&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void __init davinci_map_common_io(void)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;  davinci_clk_init();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/irq.c ###&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/time.c ###&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/clock.c ###&lt;br /&gt;&lt;br /&gt;#include &lt;asm arch="" h=""&gt;&lt;br /&gt;&lt;br /&gt;int __init davinci_clk_init(void)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;  if (cpu_is_davinci_dm355()) {&lt;br /&gt;      /*&lt;br /&gt;       * FIXME&lt;br /&gt;       * We're assuming a 24MHz reference, but the DM355 also&lt;br /&gt;       * supports a 36MHz reference.&lt;br /&gt;       */&lt;br /&gt;      unsigned long postdiv;&lt;br /&gt;&lt;br /&gt;      /*&lt;br /&gt;       * Read the PLL1 POSTDIV register to determine if the post&lt;br /&gt;       * divider is /1 or /2&lt;br /&gt;       */&lt;br /&gt;      postdiv = (davinci_readl(DAVINCI_PLL_CNTRL0_BASE + 0x128) &amp;amp; 0x1f) + 1;&lt;br /&gt;&lt;br /&gt;      fixedrate = 24000000;&lt;br /&gt;      armrate = (PLL1_PLLM + 1)*(fixedrate/(16*postdiv));&lt;br /&gt;      commonrate = armrate/2;&lt;br /&gt;  } else {&lt;br /&gt;...&lt;br /&gt;  }&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/serial.c ###&lt;br /&gt;&lt;br /&gt;void __init davinci_serial_init(struct platform_device *pdev)&lt;br /&gt;{&lt;br /&gt;  struct clk *uart_clk;&lt;br /&gt;  struct device *dev = &amp;amp;pdev-&gt;dev;&lt;br /&gt;  struct plat_serial8250_port *p;&lt;br /&gt;  int uart;&lt;br /&gt;  char uart_name[6];&lt;br /&gt;&lt;br /&gt;  memset(uart_name, 0, sizeof(uart_name));&lt;br /&gt;  for (p = dev-&gt;platform_data; p &amp;amp;&amp;amp; p-&gt;flags; p++) {&lt;br /&gt;      switch (p-&gt;mapbase) {&lt;br /&gt;          case DAVINCI_UART0_BASE:&lt;br /&gt;              uart = 0;&lt;br /&gt;              break;&lt;br /&gt;          case DAVINCI_UART1_BASE:&lt;br /&gt;              uart = 1;&lt;br /&gt;              break;&lt;br /&gt;          case DM644X_UART2_BASE:&lt;br /&gt;          case DM355_UART2_BASE:&lt;br /&gt;              uart = 2;&lt;br /&gt;              break;&lt;br /&gt;          default:&lt;br /&gt;              dev_err(dev,&lt;br /&gt;                  "Unknown UART base address 0x%08lx\n",&lt;br /&gt;                  p-&gt;mapbase);&lt;br /&gt;              continue;&lt;br /&gt;      }&lt;br /&gt;      sprintf(uart_name, "UART%i", uart);&lt;br /&gt;      uart_clk = clk_get(dev, uart_name);&lt;br /&gt;      if (IS_ERR(uart_clk))&lt;br /&gt;          dev_err(dev, "failed to get %s clock\n", uart_name);&lt;br /&gt;      else&lt;br /&gt;          clk_enable(uart_clk);&lt;br /&gt;      davinci_serial_reset(p);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/gpio.c ###&lt;br /&gt;&lt;br /&gt;int gpio_interrupt_bank_enable(int gpio)&lt;br /&gt;{&lt;br /&gt;  void *__iomem ptr1;&lt;br /&gt;  u32 temp = 0;&lt;br /&gt;  u32 mask = 0;&lt;br /&gt;  u32 gpio_bank;&lt;br /&gt;  u32 max_gpio = 0;&lt;br /&gt;&lt;br /&gt;  if (cpu_is_davinci_dm355())&lt;br /&gt;      max_gpio = DM355_NUM_GIOS;&lt;br /&gt;  else if (cpu_is_davinci_dm6443())&lt;br /&gt;      max_gpio = DM644x_NUM_GIOS;&lt;br /&gt;&lt;br /&gt;  if (gpio &gt;= max_gpio)&lt;br /&gt;      return -EINVAL;&lt;br /&gt;  gpio_bank = gpio/16;&lt;br /&gt;&lt;br /&gt;  ptr1 = (void *__iomem) IO_ADDRESS(DAVINCI_GPIO_BASE + 0x8);&lt;br /&gt;  mask = (1 &lt;&lt; temp =" __raw_readl(ptr1);" g =" gpio2controller(gpio);" mask =" gpio_mask(gpio);"&gt;set_rising);&lt;br /&gt;  if (trigger &amp;amp; TRIGGER_FALLING_EDGE)&lt;br /&gt;          __raw_writel(mask, &amp;amp;g-&gt;set_falling);&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;EXPORT_SYMBOL(gpio_interrupt_enable);&lt;br /&gt;&lt;br /&gt;int gpio_interrupt_disable(unsigned gpio, int trigger)&lt;br /&gt;{&lt;br /&gt;  struct gpio_controller  *__iomem g = gpio2controller(gpio);&lt;br /&gt;  u32 mask;&lt;br /&gt;  if (!g)&lt;br /&gt;      return -EINVAL;&lt;br /&gt;&lt;br /&gt;  if (trigger &amp;amp; ~(TRIGGER_RISING_EDGE|TRIGGER_FALLING_EDGE))&lt;br /&gt;      return -EINVAL;&lt;br /&gt;&lt;br /&gt;  mask = gpio_mask(gpio);&lt;br /&gt;&lt;br /&gt;  if (trigger &amp;amp; TRIGGER_RISING_EDGE)&lt;br /&gt;          __raw_writel(mask, &amp;amp;g-&gt;clr_rising);&lt;br /&gt;  if (trigger &amp;amp; TRIGGER_FALLING_EDGE)&lt;br /&gt;          __raw_writel(mask, &amp;amp;g-&gt;clr_falling);&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;EXPORT_SYMBOL(gpio_interrupt_disable);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/psc.c ###&lt;br /&gt;&lt;br /&gt;void __init davinci_psc_init(void)&lt;br /&gt;{&lt;br /&gt;  // board_setup_psc() - in DM355&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;  davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_McBSP1, 1);&lt;br /&gt;  davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_SPI, 1);&lt;br /&gt;&lt;br /&gt;  /* Turn on WatchDog timer LPSC.     Needed for RESET to work */&lt;br /&gt;  davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_TIMER2, 1);&lt;br /&gt;&lt;br /&gt;  davinci_serial_init(&amp;amp;serial_device);&lt;br /&gt;  davinci_writel(0x56837210, DAVINCI_VPSS_REGS_BASE + 0x810);&lt;br /&gt;  davinci_writel(0x7b3c0004, DAVINCI_VPSS_REGS_BASE + 0x814);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### arch/arm/mach-davinci/board-evm.c ###&lt;br /&gt;&lt;br /&gt;MACHINE_START(DAVINCI_EVM, "DaVinci DM355 EVM")&lt;br /&gt;  /* Maintainer: MontaVista Software &lt;source@mvista.com&gt; */&lt;br /&gt;  .phys_io      = IO_PHYS,&lt;br /&gt;  .io_pg_offst  = (io_p2v(IO_PHYS) &gt;&gt; 18) &amp;amp; 0xfffc,&lt;br /&gt;  .boot_params  = (DAVINCI_DDR_BASE + 0x100),&lt;br /&gt;  .map_io          = davinci_evm_map_io,&lt;br /&gt;  .init_irq     = davinci_evm_irq_init,&lt;br /&gt;  .timer          = &amp;amp;davinci_timer,&lt;br /&gt;  .init_machine = davinci_evm_init,&lt;br /&gt;MACHINE_END&lt;br /&gt;&lt;br /&gt;static __init void davinci_evm_init(void)&lt;br /&gt;{&lt;br /&gt;  davinci_psc_init();&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;  platform_add_devices(davinci_evm_devices,&lt;br /&gt;               ARRAY_SIZE(davinci_evm_devices));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;static void __init davinci_evm_map_io(void)&lt;br /&gt;{&lt;br /&gt;  davinci_map_common_io();&lt;br /&gt;&lt;br /&gt;// start - montavista - 2008/04/18&lt;br /&gt;#ifdef CONFIG_KGDB_8250&lt;br /&gt;      early_serial_setup((struct uart_port *)&amp;amp;serial_platform_data[kgdb8250_ttyS]);&lt;br /&gt;      kgdb8250_add_platform_port(kgdb8250_ttyS, &amp;amp;serial_platform_data[kgdb8250_ttyS]);&lt;br /&gt;#endif&lt;br /&gt;  /* Initialize the DaVinci EVM board settigs */&lt;br /&gt;  board_init ();&lt;br /&gt;// end - montavista - 2008/04/18&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/ ###&lt;br /&gt;&lt;br /&gt;Add files as following:&lt;br /&gt;davinci_aew.h&lt;br /&gt;davinci_aew_hw.h&lt;br /&gt;davinci_af.h&lt;br /&gt;davinci_af_hw.h&lt;br /&gt;davinci_previewer.h&lt;br /&gt;davinci_previewer_hw.h&lt;br /&gt;davinci_pwm.h&lt;br /&gt;davinci_resizer.h&lt;br /&gt;davinci_resizer_hw.h&lt;br /&gt;dm355_aew.h&lt;br /&gt;dm355_aew_hw.h&lt;br /&gt;dm355_af.h&lt;br /&gt;dm355_af_hw.h&lt;br /&gt;dm355_ipipe.h&lt;br /&gt;dm355_ipipe_hw.h&lt;br /&gt;&lt;br /&gt;edma.h&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/gpio.h ###&lt;br /&gt;&lt;br /&gt;extern int gpio_interrupt_bank_enable(int gpio);&lt;br /&gt;extern int gpio_interrupt_enable(unsigned gpio, int trigger);&lt;br /&gt;extern int gpio_interrupt_disable(unsigned gpio, int trigger);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/io.h ###&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;difference&lt;br /&gt;                      android                dm355&lt;br /&gt;IO_PHYS            01c00000            01c00000&lt;br /&gt;IO_VIRT            fec00000            e1000000&lt;br /&gt;IO_SIZE            00400000            00400000&lt;br /&gt;IO_OFFSET    fd000000            df400000&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define IO_PHYS         0x01c00000&lt;br /&gt;#define IO_VIRT         0xe1000000&lt;br /&gt;#define IO_SIZE         0x00400000&lt;br /&gt;#define io_p2v(pa)   (((pa) &amp;amp; (IO_SIZE-1)) + IO_VIRT)&lt;br /&gt;#define io_v2p(va)   (((va) &amp;amp; (IO_SIZE-1)) + IO_PHYS)&lt;br /&gt;#define IO_ADDRESS(x) io_p2v(x)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/dma.h ###&lt;br /&gt;&lt;br /&gt;#include &lt;asm arch="" h=""&gt;&lt;br /&gt;#include &lt;asm arch="" h=""&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/memory.h ###&lt;br /&gt;&lt;br /&gt;#define DAVINCI_IRAM_BASE   0x00008000 /* ARM Internal RAM(Data) */&lt;br /&gt;#define DAVINCI_IRAM_VIRT   0xe1400000 /* after 4M of IO space (io.h) */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/system.h ###&lt;br /&gt;&lt;br /&gt;static void arch_idle(void)&lt;br /&gt;{&lt;br /&gt;  if (!hlt_counter) {&lt;br /&gt;      unsigned long flags;&lt;br /&gt;      local_irq_save(flags);&lt;br /&gt;      if (!need_resched())&lt;br /&gt;          cpu_do_idle();&lt;br /&gt;      local_irq_restore(flags);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/timex.h ###&lt;br /&gt;&lt;br /&gt;#ifdef CONFIG_ARCH_DAVINCI355&lt;br /&gt;#define CLOCK_TICK_RATE        24000000&lt;br /&gt;#else&lt;br /&gt;#define CLOCK_TICK_RATE            27000000&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;extern void davinci_watchdog_reset(void);&lt;br /&gt;extern cycles_t davinci_get_cycles(void);&lt;br /&gt;static inline cycles_t get_cycles(void)&lt;br /&gt;{&lt;br /&gt;  return davinci_get_cycles();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/hardware.h ###&lt;br /&gt;&lt;br /&gt;#define DAVINCI_UART0_BASE                 (0x01C20000)&lt;br /&gt;#define DAVINCI_UART1_BASE                 (0x01C20400)&lt;br /&gt;&lt;br /&gt;#define DAVINCI_TIMER0_BASE                (0x01C21400)&lt;br /&gt;#define DAVINCI_TIMER1_BASE                (0x01C21800)&lt;br /&gt;#define DAVINCI_WDOG_BASE                  (0x01C21C00)&lt;br /&gt;&lt;br /&gt;#define DAVINCI_ARM_INTC_BASE              (0x01C48000)&lt;br /&gt;&lt;br /&gt;#define DM644X_ASYNC_EMIF_CNTRL_BASE        (0x01E00000)&lt;br /&gt;#define DM644X_UART2_BASE            (0x01C20800)&lt;br /&gt;&lt;br /&gt;#define DM355_MMC1_BASE                (0x01E00000)&lt;br /&gt;#define DM355_UART2_BASE            (0x01E06000)&lt;br /&gt;#define DM355_ASYNC_EMIF_CNTRL_BASE        (0x01E10000)&lt;br /&gt;#define DM355_MMC0_BASE                (0x01E11000)&lt;br /&gt;&lt;br /&gt;#define DAVINCI_MCBSP0_BASE                (0x01E02000)&lt;br /&gt;#define DAVINCI_MCBSP1_BASE                (0x01E04000)&lt;br /&gt;&lt;br /&gt;/* Power and Sleep Controller (PSC) Domains */&lt;br /&gt;#define DAVINCI_GPSC_ARMDOMAIN      0&lt;br /&gt;#define DAVINCI_GPSC_DSPDOMAIN      1&lt;br /&gt;&lt;br /&gt;#define DAVINCI_LPSC_VPSSMSTR       0       // VPSS Master LPSC&lt;br /&gt;#define DAVINCI_LPSC_VPSSSLV        1       // VPSS Slave LPSC&lt;br /&gt;#define DAVINCI_LPSC_TPCC           2       // TPCC LPSC&lt;br /&gt;#define DAVINCI_LPSC_TPTC0          3       // TPTC0 LPSC&lt;br /&gt;#define DAVINCI_LPSC_TPTC1          4       // TPTC1 LPSC&lt;br /&gt;#define DAVINCI_LPSC_EMAC           5       // EMAC LPSC&lt;br /&gt;#define DAVINCI_LPSC_EMAC_WRAPPER   6       // EMAC WRAPPER LPSC&lt;br /&gt;#define DAVINCI_LPSC_MDIO           7       // MDIO LPSC&lt;br /&gt;#define DAVINCI_LPSC_MMC_SD1        7       // MMC_SD1 LPSC&lt;br /&gt;#define DAVINCI_LPSC_IEEE1394       8       // IEEE1394 LPSC&lt;br /&gt;#define DAVINCI_LPSC_McBSP1         8       // McBSP1 LPSC&lt;br /&gt;#define DAVINCI_LPSC_USB            9       // USB LPSC&lt;br /&gt;#define DAVINCI_LPSC_ATA            10      // ATA LPSC&lt;br /&gt;#define DAVINCI_LPSC_PWM3           10      // PWM3 LPSC&lt;br /&gt;#define DAVINCI_LPSC_VLYNQ          11      // VLYNQ LPSC&lt;br /&gt;#define DAVINCI_LPSC_UHPI           12      // UHPI LPSC&lt;br /&gt;#define DAVINCI_LPSC_DDR_EMIF       13      // DDR_EMIF LPSC&lt;br /&gt;#define DAVINCI_LPSC_AEMIF          14      // AEMIF LPSC&lt;br /&gt;#define DAVINCI_LPSC_MMC_SD0        15      // MMC_SD0 LPSC&lt;br /&gt;#define DAVINCI_LPSC_MEMSTICK       16      // MEMSTICK LPSC&lt;br /&gt;#define DAVINCI_LPSC_McBSP0         17      // McBSP0 LPSC&lt;br /&gt;#define DAVINCI_LPSC_I2C            18      // I2C LPSC&lt;br /&gt;#define DAVINCI_LPSC_UART0          19      // UART0 LPSC&lt;br /&gt;#define DAVINCI_LPSC_UART1          20      // UART1 LPSC&lt;br /&gt;#define DAVINCI_LPSC_UART2          21      // UART2 LPSC&lt;br /&gt;#define DAVINCI_LPSC_SPI            22      // SPI LPSC&lt;br /&gt;#define DAVINCI_LPSC_PWM0           23      // PWM0 LPSC&lt;br /&gt;#define DAVINCI_LPSC_PWM1           24      // PWM1 LPSC&lt;br /&gt;#define DAVINCI_LPSC_PWM2           25      // PWM2 LPSC&lt;br /&gt;#define DAVINCI_LPSC_GPIO           26      // GPIO LPSC&lt;br /&gt;#define DAVINCI_LPSC_TIMER0         27      // TIMER0 LPSC&lt;br /&gt;#define DAVINCI_LPSC_TIMER1         28      // TIMER1 LPSC&lt;br /&gt;#define DAVINCI_LPSC_TIMER2         29      // TIMER2 LPSC&lt;br /&gt;#define DAVINCI_LPSC_SYSTEM_SUBSYS  30      // SYSTEM SUBSYSTEM LPSC&lt;br /&gt;#define DAVINCI_LPSC_ARM            31      // ARM LPSC&lt;br /&gt;#define DAVINCI_LPSC_SCR2           32      // SCR2 LPSC&lt;br /&gt;#define DAVINCI_LPSC_SCR3           33      // SCR3 LPSC&lt;br /&gt;#define DAVINCI_LPSC_SCR4           34      // SCR4 LPSC&lt;br /&gt;#define DAVINCI_LPSC_CROSSBAR       35      // CROSSBAR LPSC&lt;br /&gt;#define DAVINCI_LPSC_CFG27          36      // CFG27 LPSC&lt;br /&gt;#define DAVINCI_LPSC_CFG3           37      // CFG3 LPSC&lt;br /&gt;#define DAVINCI_LPSC_CFG5           38      // CFG5 LPSC&lt;br /&gt;#define DAVINCI_LPSC_GEM            39      // GEM LPSC&lt;br /&gt;#define DAVINCI_LPSC_IMCOP          40      // IMCOP LPSC&lt;br /&gt;&lt;br /&gt;/* NOR Flash base address set to CS0 by default */&lt;br /&gt;#define DAVINCI_CS0_PHYS    0x02000000&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/cpu.h ###&lt;br /&gt;&lt;br /&gt;#ifndef _ASM_ARCH_CPU_H&lt;br /&gt;#define _ASM_ARCH_CPU_H&lt;br /&gt;&lt;br /&gt;extern unsigned int system_rev;&lt;br /&gt;&lt;br /&gt;#define GET_DAVINCI_CPU_TYPE    ((system_rev &gt;&gt; 16) &amp;amp; 0xffff)&lt;br /&gt;&lt;br /&gt;#define IS_DAVINCI_CPU(type, id)            \&lt;br /&gt;static inline int cpu_is_davinci_dm ##type (void)        \&lt;br /&gt;{                            \&lt;br /&gt;      return (GET_DAVINCI_CPU_TYPE == (id)) ? 1 : 0;    \&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* following generates the cpu_is_davinci_dmxxx */&lt;br /&gt;IS_DAVINCI_CPU(6443, 0x6443)    /* cpu_is_davinci_dm6443() */&lt;br /&gt;IS_DAVINCI_CPU(6467, 0x6467)    /* cpu_is_davinci_dm6467() */&lt;br /&gt;/*IS_DAVINCI_CPU(355, 0x350)*/    /* cpu_is_davinci_dm355() */&lt;br /&gt;IS_DAVINCI_CPU(355, 0x355)    /* cpu_is_davinci_dm355() */&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/arch-davinci/uncompress.h ###&lt;br /&gt;&lt;br /&gt;#ifdef    CONFIG_DAVINCI_LL_DEBUG_UART1&lt;br /&gt;#define DAVINCI_UART_BASE DAVINCI_UART1_BASE&lt;br /&gt;#else&lt;br /&gt;#define DAVINCI_UART_BASE DAVINCI_UART0_BASE&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;typedef struct uart_registers_t {&lt;br /&gt;  unsigned int rbr_thr;&lt;br /&gt;  unsigned int ier;&lt;br /&gt;  unsigned int iir_fcr;&lt;br /&gt;  unsigned int lcr;&lt;br /&gt;  unsigned int mcr;&lt;br /&gt;  unsigned int lsr;&lt;br /&gt;  unsigned int msr;&lt;br /&gt;  unsigned int scr;&lt;br /&gt;  unsigned int dll;&lt;br /&gt;  unsigned int dlh;&lt;br /&gt;  unsigned int pid1;&lt;br /&gt;  unsigned int pid2;&lt;br /&gt;  unsigned int pwremu;&lt;br /&gt;} uart_registers;&lt;br /&gt;&lt;br /&gt;/* Initialize Serial port */&lt;br /&gt;static void do_nothing(void)&lt;br /&gt;{&lt;br /&gt;  unsigned int counter;&lt;br /&gt;  for (counter = 0; counter &lt; uartregs =" (volatile"&gt;lsr &amp;amp; 0x20) {&lt;br /&gt;      /* Do Nothing */&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static void serial_putc(const char c)&lt;br /&gt;{&lt;br /&gt;  volatile uart_registers *uartregs;&lt;br /&gt;&lt;br /&gt;  uartregs = (volatile uart_registers *) DAVINCI_UART_BASE;&lt;br /&gt;  if (c == '\n')&lt;br /&gt;      serial_putc('\r');&lt;br /&gt;  uartregs-&gt;rbr_thr = c;&lt;br /&gt;&lt;br /&gt;  serial_waitfortxcharcomplete();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Send string on UART */&lt;br /&gt;static void putstr(const char *str)&lt;br /&gt;{&lt;br /&gt;  volatile uart_registers *uartregs;&lt;br /&gt;&lt;br /&gt;  uartregs = (volatile uart_registers *) DAVINCI_UART_BASE;&lt;br /&gt;  while (*str != '\0') {&lt;br /&gt;      serial_putc(*str);&lt;br /&gt;      str++;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/mach/arch.h ###&lt;br /&gt;&lt;br /&gt;struct machine_desc {&lt;br /&gt;  /*&lt;br /&gt;   * Note! The first four elements are used&lt;br /&gt;   * by assembler code in head-armv.S&lt;br /&gt;   */&lt;br /&gt;  unsigned int        nr;        /* architecture number    */&lt;br /&gt;  unsigned int        phys_io;    /* start of physical io    */&lt;br /&gt;  unsigned int        io_pg_offst;    /* byte offset for io&lt;br /&gt;                       * page tabe entry    */&lt;br /&gt;&lt;br /&gt;  const char        *name;        /* architecture name    */&lt;br /&gt;  unsigned long        boot_params;    /* tagged list        */&lt;br /&gt;&lt;br /&gt;  unsigned int        video_start;    /* start of video RAM    */&lt;br /&gt;  unsigned int        video_end;    /* end of video RAM    */&lt;br /&gt;&lt;br /&gt;  unsigned int        reserve_lp0 :1;    /* never has lp0    */&lt;br /&gt;  unsigned int        reserve_lp1 :1;    /* never has lp1    */&lt;br /&gt;  unsigned int        reserve_lp2 :1;    /* never has lp2    */&lt;br /&gt;  unsigned int        soft_reboot :1;    /* soft reboot        */&lt;br /&gt;  void            (*fixup)(struct machine_desc *,&lt;br /&gt;                   struct tag *, char **,&lt;br /&gt;                   struct meminfo *);&lt;br /&gt;  void            (*map_io)(void);/* IO mapping function    */&lt;br /&gt;  void            (*init_irq)(void);&lt;br /&gt;  struct sys_timer    *timer;        /* system tick timer    */&lt;br /&gt;  void            (*init_machine)(void);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;#define MACHINE_START(_type,_name)            \&lt;br /&gt;static const struct machine_desc __mach_desc_##_type    \&lt;br /&gt;__used                            \&lt;br /&gt;__attribute__((__section__(".arch.info.init"))) = {    \&lt;br /&gt;  .nr        = MACH_TYPE_##_type,        \&lt;br /&gt;  .name        = _name,&lt;br /&gt;&lt;br /&gt;#define MACHINE_END                \&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;static const struct machine_desc __mach_desc_DAVINCI_DM355_EVM&lt;br /&gt;  .nr        = MACH_TYPE_DAVINCI_DM355_EVM,        \&lt;br /&gt;  .name    = "DaVinci DM355 EVM",&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;__attribute__((__section__(".arch.info.init")))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/setup.h ###&lt;br /&gt;&lt;br /&gt;#define ATAG_OMAP       0x414f4d50&lt;br /&gt;&lt;br /&gt;struct tag_omap {&lt;br /&gt;  u8 data[0];&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### include/asm-arm/procinfo.h ###&lt;br /&gt;&lt;br /&gt;#define PROC_INFO_SZ    48&lt;br /&gt;&lt;br /&gt;#define HWCAP_SWP    1&lt;br /&gt;#define HWCAP_HALF    2&lt;br /&gt;#define HWCAP_THUMB    4&lt;br /&gt;#define HWCAP_26BIT    8    /* Play it safe */&lt;br /&gt;#define HWCAP_FAST_MULT    16&lt;br /&gt;#define HWCAP_FPA    32&lt;br /&gt;#define HWCAP_VFP    64&lt;br /&gt;#define HWCAP_EDSP    128&lt;br /&gt;#define HWCAP_JAVA    256&lt;/asm&gt;&lt;/asm&gt;&lt;/source@mvista.com&gt;&lt;/asm&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-5271253665958368855?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MtpIUTr_HJDy2VIbCLcwwEIIh1k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MtpIUTr_HJDy2VIbCLcwwEIIh1k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MtpIUTr_HJDy2VIbCLcwwEIIh1k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MtpIUTr_HJDy2VIbCLcwwEIIh1k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/4U7nDUF8MlU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/5271253665958368855/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=5271253665958368855" title="4 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/5271253665958368855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/5271253665958368855?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/4U7nDUF8MlU/unfinished-task-proting-android-linux.html" title="Unfinished task - porting android linux-2.6.23 to TI Davinci DM355" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/11/unfinished-task-proting-android-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YBRncyfCp7ImA9WxRWE0U.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-958117821711856181</id><published>2008-10-30T22:56:00.000+08:00</published><updated>2008-10-30T23:39:17.994+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-30T23:39:17.994+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="arm" /><category scheme="http://www.blogger.com/atom/ns#" term="gcc" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="cross-compile" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><category scheme="http://www.blogger.com/atom/ns#" term="uclibc" /><title>自行編譯 Cross-Compiled gcc for ARM</title><content type="html">這是參考 &lt;a href="http://cross-lfs.org/view/clfs-embedded/arm/"&gt;Cross-Compiled Linux From Scratch - Embedded&lt;/a&gt; (Version SVN-0.0.1-20080109-arm) 的資料, 實際編譯 cross compiled gcc for ARM 的程序.&lt;br /&gt;&lt;br /&gt;[Adding the ARMDEV User]&lt;br /&gt;&lt;br /&gt;$ su -&lt;br /&gt;# groupadd armdev&lt;br /&gt;# useradd -s /bin/bash -g armdev -m -k /dev/null armdev&lt;br /&gt;# useradd -s /bin/bash -g wizign -m armdev&lt;br /&gt;# passwd armdev&lt;br /&gt;# chown -Rv armdev ${ARMDEV}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Preparing a New Partition]&lt;br /&gt;&lt;br /&gt;# export ARMDEV='/mnt/armdev'&lt;br /&gt;# install -dv ${ARMDEV}&lt;br /&gt;# mkdir /vdisk/arm_disk&lt;br /&gt;# mkdir -pv ${ARMDEV}&lt;br /&gt;# mount --bind /vdisk/arm_disk ${ARMDEV}&lt;br /&gt;&lt;br /&gt;[Create source directory]&lt;br /&gt;# mkdir -v ${ARMDEV}/sources&lt;br /&gt;# chmod -v a+wt ${ARMDEV}/sources&lt;br /&gt;&lt;br /&gt;[Check and download packages]&lt;br /&gt;&lt;br /&gt;$ su - armdev&lt;br /&gt;&lt;br /&gt;[]Binutils (2.18)&lt;br /&gt;$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.18.tar.bz2&lt;br /&gt;&lt;br /&gt;[]Busybox (1.4.1)&lt;br /&gt;$ wget http://busybox.net/downloads/busybox-1.4.1.tar.bz2&lt;br /&gt;&lt;br /&gt;[]CLFS-Bootscripts (1.0-pre4)&lt;br /&gt;$ wget http://cross-lfs.org/files/packages/embedded-0.0.1/clfs-embedded-bootscripts-1.0-pre4.tar.bz2&lt;br /&gt;&lt;br /&gt;[]E2fsprogs (1.39)&lt;br /&gt;$ wget http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.39.tar.gz&lt;br /&gt;&lt;br /&gt;[]GCC (4.1.2)&lt;br /&gt;$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2&lt;br /&gt;&lt;br /&gt;[]Iana-Etc (2.20)&lt;br /&gt;$ wget http://www.sethwklein.net/projects/iana-etc/downloads/iana-etc-2.20.tar.bz2&lt;br /&gt;&lt;br /&gt;[]Linux (2.6.20.1)&lt;br /&gt;$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.1.tar.bz2&lt;br /&gt;&lt;br /&gt;[]Linux-Headers (2.6.20.1-02252007)&lt;br /&gt;$ wget http://cross-lfs.org/files/packages/embedded-0.0.1/linux-headers-2.6.20.1-02252007.tar.bz2&lt;br /&gt;&lt;br /&gt;[]uClibc (0.9.29)&lt;br /&gt;$ wget http://www.uclibc.org/downloads/uClibc-0.9.29.tar.bz2&lt;br /&gt;&lt;br /&gt;[]Zlib (1.2.3)&lt;br /&gt;$ wget http://www.zlib.net/zlib-1.2.3.tar.gz&lt;br /&gt;&lt;br /&gt;[Check and download patched]&lt;br /&gt;&lt;br /&gt;[]Binutils Posix Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-sysroot/patches/binutils-2.18-posix-1.patch&lt;br /&gt;&lt;br /&gt;[]Binutils Posix Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/binutils-2.17-posix-1.patch&lt;br /&gt;&lt;br /&gt;[]Binutils uClibc Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/binutils-2.17-uclibc-1.patch&lt;br /&gt;&lt;br /&gt;[]Busybox Fixes Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/busybox-1.8.2-fixes-1.patch&lt;br /&gt;&lt;br /&gt;[]GCC Cross Search Paths Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/gcc-4.1.2-cross_search_paths-1.patch&lt;br /&gt;&lt;br /&gt;[]GCC Posix Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/gcc-4.1.2-posix-1.patch&lt;br /&gt;&lt;br /&gt;[]GCC uClibc Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/gcc-4.1.2-uclibc-1.patch&lt;br /&gt;&lt;br /&gt;[]Zlib DESTDIR Patch&lt;br /&gt;$ wget http://svn.cross-lfs.org/svn/repos/cross-lfs/branches/clfs-embedded/patches/zlib-1.2.3-DESTDIR-1.patch&lt;br /&gt;&lt;br /&gt;[Final Preparations]&lt;br /&gt;&lt;br /&gt;[]Setting up the environment&lt;br /&gt;&lt;br /&gt;$ cat &gt; ~/.bash_profile &lt;&lt; "EOF"&lt;br /&gt;&gt; exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash&lt;br /&gt;&gt; EOF&lt;br /&gt;&lt;br /&gt;$ cat &gt; ~/.bashrc &lt;&lt; "EOF"&lt;br /&gt;&gt; set +h&lt;br /&gt;&gt; umask 022&lt;br /&gt;&gt; ARMDEV=/mnt/armdev&lt;br /&gt;&gt; LC_ALL=POSIX&lt;br /&gt;&gt; PATH=${ARMDEV}/cross-tools/bin:/bin:/usr/bin&lt;br /&gt;&gt; export ARMDEV LC_ALL PATH&lt;br /&gt;&gt; EOF&lt;br /&gt;&lt;br /&gt;$ source ~/.bash_profile&lt;br /&gt;&lt;br /&gt;[]Creating directories&lt;br /&gt;&lt;br /&gt;$ mkdir -pv ${ARMDEV}/build&lt;br /&gt;$ mkdir -pv ${ARMDEV}/{bin,boot,dev,{etc/,}opt,home,lib/{firmware,modules},mnt}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/{proc,media/{floppy,cdrom},sbin,srv,sys}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/var/{lock,log,mail,run,spool}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/var/{opt,cache,lib/{misc,locate},local}&lt;br /&gt;$ install -dv -m 0750 ${ARMDEV}/root&lt;br /&gt;$ install -dv -m 1777 ${ARMDEV}{/var,}/tmp&lt;br /&gt;$ mkdir -pv ${ARMDEV}/usr/{,local/}{bin,include,lib,sbin,src}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/usr/{,local/}share/{doc,info,locale,man}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/usr/{,local/}share/{misc,terminfo,zoneinfo}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}&lt;br /&gt;$ mkdir -pv ${ARMDEV}/cross-tools{,/bin}&lt;br /&gt;$ for dir in ${ARMDEV}/usr{,/local}; do&lt;br /&gt;&gt; ln -sv share/{man,doc,info} ${dir}&lt;br /&gt;&gt; done&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]Creating the passwd, group, and log Files&lt;br /&gt;&lt;br /&gt;$ ln -svf ../proc/mounts ${ARMDEV}/etc/mtab&lt;br /&gt;&lt;br /&gt;$ cat &gt; ${ARMDEV}/etc/passwd &lt;&lt; "EOF"&lt;br /&gt;&gt; root::0:0:root:/root:/bin/ash&lt;br /&gt;&gt; bin:x:1:1:bin:/bin:/bin/false&lt;br /&gt;&gt; daemon:x:2:6:daemon:/sbin:/bin/false&lt;br /&gt;&gt; adm:x:3:16:adm:/var/adm:/bin/false&lt;br /&gt;&gt; lp:x:10:9:lp:/var/spool/lp:/bin/false&lt;br /&gt;&gt; mail:x:30:30:mail:/var/mail:/bin/false&lt;br /&gt;&gt; news:x:31:31:news:/var/spool/news:/bin/false&lt;br /&gt;&gt; uucp:x:32:32:uucp:/var/spool/uucp:/bin/false&lt;br /&gt;&gt; operator:x:50:0:operator:/root:/bin/ash&lt;br /&gt;&gt; postmaster:x:51:30:postmaster:/var/spool/mail:/bin/false&lt;br /&gt;&gt; nobody:x:65534:65534:nobody:/:/bin/false&lt;br /&gt;&gt; EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ cat &gt; ${ARMDEV}/etc/group &lt;&lt; "EOF"&lt;br /&gt;&gt; root:x:0:&lt;br /&gt;&gt; bin:x:1:&lt;br /&gt;&gt; sys:x:2:&lt;br /&gt;&gt; kmem:x:3:&lt;br /&gt;&gt; tty:x:4:&lt;br /&gt;&gt; tape:x:5:&lt;br /&gt;&gt; daemon:x:6:&lt;br /&gt;&gt; floppy:x:7:&lt;br /&gt;&gt; disk:x:8:&lt;br /&gt;&gt; lp:x:9:&lt;br /&gt;&gt; dialout:x:10:&lt;br /&gt;&gt; audio:x:11:&lt;br /&gt;&gt; video:x:12:&lt;br /&gt;&gt; utmp:x:13:&lt;br /&gt;&gt; usb:x:14:&lt;br /&gt;&gt; cdrom:x:15:&lt;br /&gt;&gt; adm:x:16:root,adm,daemon&lt;br /&gt;&gt; console:x:17:&lt;br /&gt;&gt; cdrw:x:18:&lt;br /&gt;&gt; mail:x:30:mail&lt;br /&gt;&gt; news:x:31:news&lt;br /&gt;&gt; uucp:x:32:uucp&lt;br /&gt;&gt; users:x:100:&lt;br /&gt;&gt; nogroup:x:65533:&lt;br /&gt;&gt; nobody:x:65534:&lt;br /&gt;&gt; EOF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ touch ${ARMDEV}/var/run/utmp ${ARMDEV}/var/log/{btmp,lastlog,wtmp}&lt;br /&gt;$ chmod -v 664 ${ARMDEV}/var/run/utmp ${ARMDEV}/var/log/lastlog&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Constructing Cross-Compile Tools]&lt;br /&gt;&lt;br /&gt;[]Build CFLAGS&lt;br /&gt;$ echo "Build CFLAGS"&lt;br /&gt;$ echo unset CFLAGS &gt;&gt; ~/.bashrc&lt;br /&gt;$ echo unset CXXFLAGS &gt;&gt; ~/.bashrc&lt;br /&gt;&lt;br /&gt;# Application Binary Interface (ABI) for the ARM Architecture&lt;br /&gt;# ABI Variables&lt;br /&gt;# Table 6.1. List of Build Variables&lt;br /&gt;# ABI                BUILD=Value&lt;br /&gt;# -------------------------    --------------------------------&lt;br /&gt;# 32-Bit MIPS        -mabi=32&lt;br /&gt;# 32-Bit All Others    -m32&lt;br /&gt;# N32 MIPS        -mabi=n32&lt;br /&gt;# 64-Bit MIPS        -mabi=64&lt;br /&gt;# 64-Bit All Others    -m64&lt;br /&gt;echo "ABI Variables"&lt;br /&gt;export BUILD="-m32"&lt;br /&gt;&lt;br /&gt;# Build Variables&lt;br /&gt;# Table 6.2. Processor Type and Target Triplets&lt;br /&gt;# Processor    Target Triplet&lt;br /&gt;# ----------------------------------------------    -----------------------------------------&lt;br /&gt;# Generic arm, little endian            arm-unknown-linux-uclibc&lt;br /&gt;# Generic arm, version 5, little endian    armv5l-unknown-linux-uclibc&lt;br /&gt;# Generic arm, version 5, big endian    armv5b-unknown-linux-uclibc&lt;br /&gt;&lt;br /&gt;$ export ARM_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"&lt;br /&gt;# Generic arm, little endian&lt;br /&gt;$ export ARM_TARGET="arm-unknown-linux-uclibc"&lt;br /&gt;$ echo export ARM_HOST=\""${ARM_HOST}\"" &gt;&gt; ~/.bashrc&lt;br /&gt;$ echo export ARM_TARGET=\""${ARM_TARGET}\"" &gt;&gt; ~/.bashrc&lt;br /&gt;&lt;br /&gt;[]Linux-Headers-2.6.20.1-02252007&lt;br /&gt;&lt;br /&gt;$ mkdir ${ARMDEV}/build&lt;br /&gt;$ cd ${ARMDEV}/build&lt;br /&gt;$ tar -jxvf ${ARMDEV}/sources/linux-headers-2.6.20.1-02252007.tar.bz2&lt;br /&gt;$ install -dv ${ARMDEV}/usr/include&lt;br /&gt;$ cp -av ${ARMDEV}/build/linux-headers-2.6.20.1/include/{asm-generic,linux,mtd,scsi,sound} ${ARMDEV}/usr/include&lt;br /&gt;$ cp -av ${ARMDEV}/build/linux-headers-2.6.20.1/include/asm-arm ${ARMDEV}/usr/include/asm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]Cross Binutils-2.17&lt;br /&gt;&lt;br /&gt;$ cd ${ARMDEV}/build&lt;br /&gt;$ tar -jxvf ${ARMDEV}/sources/binutils-2.17.tar.bz2&lt;br /&gt;$ cd binutils-2.17&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/binutils-2.17-posix-1.patch&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/binutils-2.17-uclibc-1.patch&lt;br /&gt;$ mkdir -v ../binutils-build&lt;br /&gt;$ cd ../binutils-build&lt;br /&gt;$ ../binutils-2.17/configure --prefix=${ARMDEV}/cross-tools --host=${ARM_HOST} --target=${ARM_TARGET} --with-sysroot=${ARMDEV} --disable-nls --enable-shared --disable-multilib&lt;br /&gt;$ make configure-host&lt;br /&gt;$ make&lt;br /&gt;$ make install&lt;br /&gt;$ cp -v ../binutils-2.17/include/libiberty.h ${ARMDEV}/usr/include&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]uClibc-0.9.29&lt;br /&gt;&lt;br /&gt;$ cd ${ARMDEV}/build&lt;br /&gt;$ tar -jxvf ${ARMDEV}/sources/uClibc-0.9.29.tar.bz2&lt;br /&gt;$ cd uClibc-0.9.29&lt;br /&gt;&lt;br /&gt;$ cp extra/Configs/Config.arm extra/Configs/Config.arm.orig&lt;br /&gt;$ sed -e "/default/s:OABI:EABI:" extra/Configs/Config.arm.orig &gt; extra/Configs/Config.arm&lt;br /&gt;$ cp Makefile{,.orig}&lt;br /&gt;$ sed -e 's/$(LN) -fs/cp/g' Makefile.orig &gt; Makefile&lt;br /&gt;$ for file in `find libc/sysdeps/linux -name Makefile`; do&lt;br /&gt;&gt; cp $file{,.orig}&lt;br /&gt;&gt; sed -e 's/$(LN) -fs/cp/g' -e 's@../libc/@$(TOPDIR)libc/@g' $file.orig &gt; $file&lt;br /&gt;&gt; done&lt;br /&gt;&lt;br /&gt;$ make defconfig ARCH=arm&lt;br /&gt;$ cp .config{,.orig}&lt;br /&gt;$ sed -e "/^CROSS_COMPILER_PREFIX/s:=.*:=\"${ARM_TARGET}-\":" -e "/^KERNEL_HEADERS/s:=.*:=\"${ARMDEV}/usr/include\":" -e "/^SHARED_LIB_LOADER_PREFIX/s:=.*:=\"/lib\":" -e "/^DEVEL_PREFIX/s:=.*:=\"/usr\":" -e "/^RUNTIME_PREFIX/s:=.*:=\"/\":" .config.orig &gt; .config&lt;br /&gt;&lt;br /&gt;$ UCLIBC_OPTIONS="DO_C99_MATH UCLIBC_HAS_RPC UCLIBC_HAS_CTYPE_CHECKED UCLIBC_HAS_WCHAR UCLIBC_HAS_HEXADECIMAL_FLOATS LDSO_PRELOAD_FILE_SUPPORT UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE UCLIBC_HAS_PRINTF_M_SPEC UCLIBC_HAS_IPV6 UCLIBC_HAS_GLIBC_CUSTOM_PRINTF UCLIBC_USE_NETLINK UCLIBC_HAS_FTW"&lt;br /&gt;$ for config in $UCLIBC_OPTIONS; do&lt;br /&gt;&gt; cp .config{,.orig}&lt;br /&gt;&gt; sed -e "s:# ${config} is not set:${config}=y:" .config.orig &gt; .config&lt;br /&gt;&gt; done&lt;br /&gt;$ UCLIBC_OPTIONS="UCLIBC_HAS_CTYPE_UNSAFE"&lt;br /&gt;$ for config in $UCLIBC_OPTIONS; do&lt;br /&gt;&gt; cp .config{,.orig}&lt;br /&gt;&gt; sed -e "s:${config}=y:# ${config} is not set:" .config.orig &gt; .config&lt;br /&gt;&gt; done&lt;br /&gt;$ echo "UCLIBC_HAS_FULL_RPC=y" &gt;&gt; .config&lt;br /&gt;$ echo "UCLIBC_HAS_REENTRANT_RPC=y" &gt;&gt; .config&lt;br /&gt;&lt;br /&gt;# If your ARM system is Big Endian, you will need at add the following lines to your configuration:&lt;br /&gt;&lt;br /&gt;$ echo "ARCH_ANY_ENDIAN=y" &gt;&gt; .config&lt;br /&gt;$ echo "ARCH_BIG_ENDIAN=y" &gt;&gt; .config&lt;br /&gt;$ echo "ARCH_WANTS_BIG_ENDIAN=y" &gt;&gt; .config&lt;br /&gt;&lt;br /&gt;# If your ARM system is Little Endian, you will need at add the following lines to your configuration:&lt;br /&gt;&lt;br /&gt;$ echo "ARCH_ANY_ENDIAN=y" &gt;&gt; .config&lt;br /&gt;$ echo "ARCH_LITTLE_ENDIAN=y" &gt;&gt; .config&lt;br /&gt;$ echo "ARCH_WANTS_LITTLE_ENDIAN=y" &gt;&gt; .config&lt;br /&gt;&lt;br /&gt;$ make oldconfig&lt;br /&gt;$ make headers&lt;br /&gt;$ mkdir ${ARMDEV}/usr/include/bits&lt;br /&gt;$ make PREFIX=${ARMDEV} install_headers&lt;br /&gt;&lt;br /&gt;[]Cross GCC-4.1.2 - Static&lt;br /&gt;&lt;br /&gt;$ cd ${ARMDEV}/build&lt;br /&gt;$ tar -jxvf ${ARMDEV}/sources/gcc-4.1.2.tar.bz2&lt;br /&gt;$ cd gcc-4.1.2&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/gcc-4.1.2-posix-1.patch&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/gcc-4.1.2-uclibc-1.patch&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/gcc-4.1.2-cross_search_paths-1.patch&lt;br /&gt;$ mkdir -v ../gcc-build&lt;br /&gt;$ cd ../gcc-build&lt;br /&gt;$ ../gcc-4.1.2/configure --prefix=${ARMDEV}/cross-tools --host=${ARM_HOST} --target=${ARM_TARGET} --disable-multilib --with-sysroot=${ARMDEV} --without-headers --disable-nls --disable-shared --disable-threads --enable-languages=c&lt;br /&gt;$ make all-gcc&lt;br /&gt;$ make install-gcc&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]ToolChain Variables&lt;br /&gt;&lt;br /&gt;$ export CC="${ARM_TARGET}-gcc"&lt;br /&gt;$ export CXX="${ARM_TARGET}-g++"&lt;br /&gt;$ export AR="${ARM_TARGET}-ar"&lt;br /&gt;$ export AS="${ARM_TARGET}-as"&lt;br /&gt;$ export LD="${ARM_TARGET}-ld"&lt;br /&gt;$ export RANLIB="${ARM_TARGET}-ranlib"&lt;br /&gt;$ export STRIP="${ARM_TARGET}-strip"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]uClibc-0.9.29&lt;br /&gt;&lt;br /&gt;$ cd ${ARMDEV}/build&lt;br /&gt;$ cd uClibc-0.9.29&lt;br /&gt;&lt;br /&gt;$ make CC="${CC}"&lt;br /&gt;$ make PREFIX=${ARMDEV} install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]Clear ToolChain Variables&lt;br /&gt;&lt;br /&gt;$ unset CC&lt;br /&gt;$ unset CXX&lt;br /&gt;$ unset AR&lt;br /&gt;$ unset AS&lt;br /&gt;$ unset LD&lt;br /&gt;$ unset RANLIB&lt;br /&gt;$ unset STRIP&lt;br /&gt;&lt;br /&gt;[]GCC-4.1.2 - Cross Compiler Final&lt;br /&gt;&lt;br /&gt;$ cd ${ARMDEV}/build&lt;br /&gt;$ rm -fr gcc-4.1.2&lt;br /&gt;$ tar -jxvf ${ARMDEV}/sources/gcc-4.1.2.tar.bz2&lt;br /&gt;$ cd gcc-4.1.2&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/gcc-4.1.2-posix-1.patch&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/gcc-4.1.2-uclibc-1.patch&lt;br /&gt;$ patch -Np1 -i ${ARMDEV}/sources/gcc-4.1.2-cross_search_paths-1.patch&lt;br /&gt;$ rm -fr ../gcc-build&lt;br /&gt;$ mkdir -v ../gcc-build&lt;br /&gt;$ cd ../gcc-build&lt;br /&gt;$ ../gcc-4.1.2/configure --prefix=${ARMDEV}/cross-tools --host=${ARM_HOST} --target=${ARM_TARGET} --disable-multilib --with-sysroot=${ARMDEV} --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 --enable-long-long --enable-threads=posix&lt;br /&gt;$ make&lt;br /&gt;$ make install&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-958117821711856181?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bbIDlwHLm4AqbbYDdZ4t2AggLDU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bbIDlwHLm4AqbbYDdZ4t2AggLDU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bbIDlwHLm4AqbbYDdZ4t2AggLDU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bbIDlwHLm4AqbbYDdZ4t2AggLDU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/FTa_5gtRifo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/958117821711856181/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=958117821711856181" title="2 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/958117821711856181?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/958117821711856181?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/FTa_5gtRifo/cross-compiled-gcc-for-arm.html" title="自行編譯 Cross-Compiled gcc for ARM" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/10/cross-compiled-gcc-for-arm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YBR3Yzeyp7ImA9WxRQFk0.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-6837920992407842991</id><published>2008-10-10T11:06:00.000+08:00</published><updated>2008-10-10T11:25:56.883+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-10T11:25:56.883+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="speaker、music note、MCU、PIC、8051" /><title>單晶片開發板製作 - 音樂盒模組</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SO7H0TMT3rI/AAAAAAAAACA/SynlDjQwIjY/s1600-h/20081006-speaker.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SO7H0TMT3rI/AAAAAAAAACA/SynlDjQwIjY/s320/20081006-speaker.gif" alt="" id="BLOGGER_PHOTO_ID_5255357516506980018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;音符的定義是根據頻率變化而訂出來的,&lt;br /&gt;相關的說明請參考 wiki - &lt;a href="http://en.wikipedia.org/wiki/Music_notes"&gt;music note&lt;/a&gt; 和&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Do_%28musical_note%29"&gt;C (musical note)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;一般的計算方式是 A4 音符為計算基準:&lt;br /&gt;f = [2 ^ (n/12)] × 440 Hz&lt;br /&gt;&lt;br /&gt;為方便程式運算, 採用 C-1 為計算基準:&lt;br /&gt;總共有 11 個音階, 每個音階有 12 個音符&lt;br /&gt;n = (i x 12)(level) + j (jth note)&lt;br /&gt;f = [2 ^ (n/12)] x 8.176 Hz&lt;br /&gt;&lt;br /&gt;運用 python 計算出所有音符的頻率:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# calculate number array&lt;br /&gt;musicNotes = []&lt;br /&gt;for i in range(11):&lt;br /&gt; row = []&lt;br /&gt; for j in range(12):&lt;br /&gt;   row.append(8.176 * (2**((i*12+j)*(1.0/12))))&lt;br /&gt; musicNotes.append(row)&lt;br /&gt;&lt;br /&gt;# display frequency table&lt;br /&gt;for i in range(11):&lt;br /&gt; musicNotes[i]&lt;br /&gt;&lt;br /&gt;[8.1760000000000002, 8.6621702594815986, 9.1772497069774346, 9.7229573722622469, 10.301114503940484, 10.913650647694201, 11.562610085962426, 12.250158660543748, 12.978591000891997, 13.75033818222874, 14.567975839030828, 15.434232760971051]&lt;br /&gt;[16.352, 17.324340518963197, 18.354499413954866, 19.445914744524494, 20.602229007880968, 21.827301295388398, 23.125220171924852, 24.500317321087497, 25.957182001783995, 27.50067636445748, 29.135951678061655, 30.868465521942102]&lt;br /&gt;[32.704000000000001, 34.648681037926387, 36.708998827909731, 38.891829489048988, 41.204458015761929, 43.654602590776797, 46.250440343849704, 49.000634642174987, 51.914364003567989, 55.001352728914959, 58.271903356123303, 61.736931043884205]&lt;br /&gt;[65.408000000000001, 69.297362075852774, 73.417997655819462, 77.783658978097975, 82.408916031523859, 87.309205181553594, 92.500880687699407, 98.001269284349974, 103.82872800713598, 110.00270545782992, 116.54380671224661, 123.47386208776841]&lt;br /&gt;[130.816, 138.59472415170555, 146.8359953116389, 155.56731795619595, 164.81783206304772, 174.61841036310716, 185.00176137539881, 196.00253856869995, 207.6574560142719, 220.00541091565984, 233.08761342449321, 246.94772417553673]&lt;br /&gt;[261.63200000000001, 277.1894483034111, 293.67199062327779, 311.1346359123919, 329.63566412609543, 349.23682072621432, 370.00352275079763, 392.00507713739989, 415.3149120285438, 440.01082183131967, 466.17522684898643, 493.89544835107347]&lt;br /&gt;[523.26400000000001, 554.3788966068222, 587.34398124655559, 622.2692718247838, 659.27132825219087, 698.47364145242864, 740.00704550159526, 784.01015427479979, 830.6298240570876, 880.02164366263935, 932.35045369797285, 987.79089670214694]&lt;br /&gt;[1046.528, 1108.7577932136444, 1174.6879624931112, 1244.5385436495676, 1318.5426565043817, 1396.9472829048573, 1480.0140910031905, 1568.0203085495996, 1661.2596481141752, 1760.0432873252787, 1864.7009073959457, 1975.5817934042939]&lt;br /&gt;[2093.056, 2217.5155864272874, 2349.3759249862223, 2489.0770872991352, 2637.0853130087612, 2793.8945658097145, 2960.028182006381, 3136.0406170991969, 3322.5192962283504, 3520.0865746505574, 3729.4018147918891, 3951.1635868085878]&lt;br /&gt;[4186.1120000000001, 4435.0311728545748, 4698.7518499724447, 4978.1541745982704, 5274.1706260175224, 5587.7891316194291, 5920.0563640127621, 6272.0812341983938, 6645.0385924567008, 7040.1731493011148, 7458.8036295837783, 7902.3271736171755]&lt;br /&gt;[8372.2240000000002, 8870.0623457091497, 9397.5036999448894, 9956.3083491965408, 10548.341252035045, 11175.578263238858, 11840.112728025524, 12544.162468396788, 13290.077184913402, 14080.34629860223, 14917.607259167557, 15804.654347234351]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;根據上面的數值定義 const float gMusicNotes[11][12] 即可得到所有的頻率資料.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;電路圖如下:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SO7IAbHzeCI/AAAAAAAAACI/OSvCGT0M0jI/s1600-h/20081010-speaker-schema.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SO7IAbHzeCI/AAAAAAAAACI/OSvCGT0M0jI/s320/20081010-speaker-schema.gif" alt="" id="BLOGGER_PHOTO_ID_5255357724793993250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;主程式如下:&lt;br /&gt;(受限於單晶片的特性, for PIC16F877A 必須用 PICC 做編譯, 另外 music_cell gSong[] 的容量會受限制.)&lt;br /&gt;(本程式是用 delay 方式處理, 所以聲音頻率誤差較大; 使用 timer 方式處理, 聲音頻率會比較準確)&lt;br /&gt;&lt;pre&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;  Copyright (c) 2008 Wizign Ltd.&lt;br /&gt;  All Rights Reserved.&lt;br /&gt;&lt;br /&gt;  main.c: Main program for demo trigger of speaker&lt;br /&gt;&lt;br /&gt;  Version: 1.0.0&lt;br /&gt;&lt;br /&gt;  Date: Oct 03, 2008&lt;br /&gt;&lt;br /&gt;  Author: YenHung Chen&lt;br /&gt;&lt;br /&gt;  E-mail: yhchen@wizign.com&lt;br /&gt;&lt;br /&gt;  Revision:&lt;br /&gt;  ---------- -----------------------------------------------------------------&lt;br /&gt;  2008/10/03 Created by YenHung Chen, demo trigger of speaker for both 8051 and PIC&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;&gt;For AT89S52&lt;br /&gt;&lt;br /&gt;LCD display:&lt;br /&gt;  There are 8 data pins, which are connected P2.&lt;br /&gt;  The control pins are connected to P1_0, P1_1, and P1_2.&lt;br /&gt;&lt;br /&gt;Speaker:&lt;br /&gt;  P3_0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&gt;For PIC16F877A&lt;br /&gt;&lt;br /&gt;LCD display:&lt;br /&gt;  There are 8 data pins, which are connected PORTD&lt;br /&gt;  The control pins are connected to RA0, RA1, and RA2.&lt;br /&gt;&lt;br /&gt;Speaker:&lt;br /&gt;  RC0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;&lt;br /&gt;#include "global.h"&lt;br /&gt;#include "delay.h"&lt;br /&gt;#include "lcd.h"&lt;br /&gt;#include "timer.h"&lt;br /&gt;#include "music.h"&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define IO and global variables&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;/*&lt;br /&gt;// Configurations&lt;br /&gt;typedef unsigned int config;&lt;br /&gt;config at 0x2007 __CONFIG = _XT_OSC &amp;amp; _PWRTE_OFF &amp;amp; _BODEN_OFF &amp;amp; _WDT_OFF &amp;amp; _LVP_OFF;&lt;br /&gt;*/&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;bank1 static music_cell gSong[] = {&lt;br /&gt;#else   // default is MCU_8051&lt;br /&gt;music_cell gSong[] = {&lt;br /&gt;#endif&lt;br /&gt;  {C4, LA,    1}, {C4, LA, 0.25}, {C4, SO, 0.25}, {C4, LA,  0.5},&lt;br /&gt;  {C4, SO,    1}, {C4, MI,    1}, {C4, SO,  0.5}, {C4, MI,  0.5},&lt;br /&gt;  {C4, MI,  0.5}, {C4, RE,  0.5}, {C4, MI,    2}, {C4, MI,    0},&lt;br /&gt;  {C4, RE,    1}, {C4, RE,  0.5}, {C4, DO,  0.5}, {C4, RE,  0.5},&lt;br /&gt;  {C4, RE,  0.5}, {C4, SO,    1}, {C4, SO,  0.5}, {C4, MI,  0.5},&lt;br /&gt;  {C4, MI,  0.5}, {C4, RE,  0.5}, {C4, MI,    2}, {C4, MI,    0},&lt;br /&gt;  {C4, LA,    1}, {C4, LA,  0.5}, {C4, SO,  0.5}, {C4, LA,  0.5},&lt;br /&gt;  {C4, SO,  0.5}, {C4, MI,    1}, {C4, FA,  0.5}, {C4, FA, 0.25},&lt;br /&gt;  {C4, FA, 0.25}, {C4, MI,  0.5}, {C4, RE,  0.5}, {C4, MI,    2},&lt;br /&gt;  {C4, MI,    0}, {C4, SO,    1}, {C4, SO,  0.5}, {C4, SO,  0.5},&lt;br /&gt;  {C4, SO,  0.5}, {C4, SO,  0.5}, {C4, SI,    1}, {C4, LA,  0.5},&lt;br /&gt;  {C4, LA, 0.25}, {C4, LA, 0.25}, {C4, LA,  0.5}, {C4, SO,  0.5},&lt;br /&gt;  {C4, LA,    2}, {C4, LA,    0}, {C5, DO,    1}, {C5, DO,  0.5},&lt;br /&gt;  {C5, DO,  0.5}, {C4, SI,    1}, {C4, SO,    1}, {C4, LA,  0.5},&lt;br /&gt;  {C4, LA, 0.25}, {C4, LA, 0.25}, {C4, LA,  0.5}, {C4, SO,  0.5},&lt;br /&gt;  {C4, LA,  1.5}, {C4, SO, 0.25}, {C4, MI, 0.25}, {C4, SO,    1},&lt;br /&gt;  {C4, SO, 0.75}, {C4, SO, 0.25}, {C4, SO,  0.5}, {C4, SO,  0.5},&lt;br /&gt;  {C4, SI,    1}, {C4, LA, 0.33}, {C4, LA, 0.33}, {C4, LA, 0.33},&lt;br /&gt;  {C4, LA,  0.5}, {C4, SO,  0.5}, {C4, LA,    2}, {C4, LA,    0}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define functions&lt;br /&gt;&lt;br /&gt;/* Initilize parameters before run the main loop */&lt;br /&gt;void InitParams(void)&lt;br /&gt;{&lt;br /&gt;  LCDInit();&lt;br /&gt;  MusicInit();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Display message on LCD panel */&lt;br /&gt;void DisplayMusicStatus(char* pMsg)&lt;br /&gt;{&lt;br /&gt;  LCDGoto(0);    // goto 1st line&lt;br /&gt;  LCDPuts("  WIZIGN LTD.  ");&lt;br /&gt;&lt;br /&gt;  // Display rotate status&lt;br /&gt;  LCDGoto(0x40);    // goto 2nd line&lt;br /&gt;  LCDPuts(pMsg);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// main program&lt;br /&gt;&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;  int count = 0;&lt;br /&gt;  int direction = 0;  // 0:clockwise, 1:counter clockwise&lt;br /&gt;&lt;br /&gt;  // Initilize parameters&lt;br /&gt;  InitParams();&lt;br /&gt;&lt;br /&gt;  /* do loop */&lt;br /&gt;  while(1){&lt;br /&gt;      DisplayMusicStatus("Play Music");&lt;br /&gt;      MusicPlay(10, gSong);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-6837920992407842991?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A4X2iSoEJuuD7ob957whFxYnMGY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A4X2iSoEJuuD7ob957whFxYnMGY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A4X2iSoEJuuD7ob957whFxYnMGY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A4X2iSoEJuuD7ob957whFxYnMGY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/IDBQ68mMDG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/6837920992407842991/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=6837920992407842991" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6837920992407842991?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6837920992407842991?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/IDBQ68mMDG0/blog-post.html" title="單晶片開發板製作 - 音樂盒模組" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SO7H0TMT3rI/AAAAAAAAACA/SynlDjQwIjY/s72-c/20081006-speaker.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/10/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUNRno_cCp7ImA9WxRRGE4.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-8739076123881777671</id><published>2008-10-01T12:37:00.000+08:00</published><updated>2008-10-01T13:18:17.448+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-01T13:18:17.448+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="motor、DC、8051、PIC、MCU、馬達" /><title>單晶片開發板製作 - 直流和步進馬達模組</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SOL_HE5tqTI/AAAAAAAAAB4/vM9K5wyLNXA/s1600-h/20081001-motors.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SOL_HE5tqTI/AAAAAAAAAB4/vM9K5wyLNXA/s320/20081001-motors.gif" alt="" id="BLOGGER_PHOTO_ID_5252040612507396402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;直流馬達和步進馬達是自動控制領域常用的驅動裝置,&lt;br /&gt;以下介紹兩種馬達的控制電路和程式撰寫.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/pu7Dl_tzWYw"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/pu7Dl_tzWYw" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;電路圖如下:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SOL-6EAWPOI/AAAAAAAAABw/CLjIpBobb80/s1600-h/20081001-MotorModule.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SOL-6EAWPOI/AAAAAAAAABw/CLjIpBobb80/s320/20081001-MotorModule.gif" alt="" id="BLOGGER_PHOTO_ID_5252040388928486626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;主程式如下:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;Copyright (c) 2008 Wizign Ltd.&lt;br /&gt;All Rights Reserved.&lt;br /&gt;&lt;br /&gt;main.c: Main program for demo trigger of motors&lt;br /&gt;&lt;br /&gt;Version: 1.0.0&lt;br /&gt;&lt;br /&gt;Date: Oct 01, 2008&lt;br /&gt;&lt;br /&gt;Author: YenHung Chen&lt;br /&gt;&lt;br /&gt;E-mail: yhchen@wizign.com&lt;br /&gt;&lt;br /&gt;Revision:&lt;br /&gt;---------- -----------------------------------------------------------------&lt;br /&gt;2008/10/01 Created by YenHung Chen, demo trigger of motors for both 8051 and PIC&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;the&gt;&lt;br /&gt;&lt;br /&gt;&lt;&gt;For AT89S52&lt;br /&gt;&lt;br /&gt;LCD display:&lt;br /&gt;There are 8 data pins, which are connected P2.&lt;br /&gt;The control pins are connected to P1_0, P1_1, and P1_2.&lt;br /&gt;&lt;br /&gt;Step motor:&lt;br /&gt;P3_0, P3_1, P3_2, P3_3&lt;br /&gt;&lt;br /&gt;DC motor:&lt;br /&gt;P3_6, P3_7&lt;br /&gt;&lt;br /&gt;&lt;&gt;For PIC16F877A&lt;br /&gt;&lt;br /&gt;LCD display:&lt;br /&gt;There are 8 data pins, which are connected PORTD&lt;br /&gt;The control pins are connected to RA0, RA1, and RA2.&lt;br /&gt;&lt;br /&gt;Step motor:&lt;br /&gt;RC0, RC1, RC2, RC3&lt;br /&gt;&lt;br /&gt;DC motor:&lt;br /&gt;RC6, RC7&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;&lt;br /&gt;#include "global.h"&lt;br /&gt;#include "delay.h"&lt;br /&gt;#include "lcd.h"&lt;br /&gt;#include "motor.h"&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define IO and global variables&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;&lt;br /&gt;// Configurations&lt;br /&gt;typedef unsigned int config;&lt;br /&gt;config at 0x2007 __CONFIG = _XT_OSC &amp;amp; _PWRTE_OFF &amp;amp; _BODEN_OFF &amp;amp; _WDT_OFF &amp;amp; _LVP_OFF;&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define functions&lt;br /&gt;&lt;br /&gt;/* Initilize parameters before run the main loop */&lt;br /&gt;void InitParams(void)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;LCDInit();&lt;br /&gt;MotorInit();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Display message on LCD panel */&lt;br /&gt;void DisplayRotateStatus(char* pMsg)&lt;br /&gt;{&lt;br /&gt;LCDGoto(0);    // goto 1st line&lt;br /&gt;LCDPuts("  WIZIGN LTD.  ");&lt;br /&gt;&lt;br /&gt;// Display rotate status&lt;br /&gt;LCDGoto(0x40);    // goto 2nd line&lt;br /&gt;LCDPuts(pMsg);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// main program&lt;br /&gt;&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;int count = 0;&lt;br /&gt;int direction = 0;  // 0:clockwise, 1:counter clockwise&lt;br /&gt;&lt;br /&gt;// Initilize parameters&lt;br /&gt;InitParams();&lt;br /&gt;&lt;br /&gt;/* do loop */&lt;br /&gt;while(1){&lt;br /&gt;    if(direction == 0){&lt;br /&gt;        DisplayRotateStatus("Clockwise");&lt;br /&gt;        MotorStepRotate(MOTOR_ROTATE_CW, 4);&lt;br /&gt;        MotorDCRotate(MOTOR_ROTATE_CW, 2);&lt;br /&gt;    }else{  // left&lt;br /&gt;        DisplayRotateStatus("C Clockwise");&lt;br /&gt;        MotorStepRotate(MOTOR_ROTATE_CCW, 2);&lt;br /&gt;        MotorDCRotate(MOTOR_ROTATE_CCW, 4);&lt;br /&gt;    }&lt;br /&gt;    count++;&lt;br /&gt;    if(count &gt;= 200){&lt;br /&gt;        count = 0;&lt;br /&gt;        direction = (direction == 0) ? 1 : 0;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/the&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-8739076123881777671?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F85LIV_MXetzsnNm_luN5fsKGTo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F85LIV_MXetzsnNm_luN5fsKGTo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F85LIV_MXetzsnNm_luN5fsKGTo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F85LIV_MXetzsnNm_luN5fsKGTo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/f6rMKYNjSBA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/8739076123881777671/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=8739076123881777671" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/8739076123881777671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/8739076123881777671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/f6rMKYNjSBA/blog-post.html" title="單晶片開發板製作 - 直流和步進馬達模組" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SOL_HE5tqTI/AAAAAAAAAB4/vM9K5wyLNXA/s72-c/20081001-motors.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8GQHs7fip7ImA9WxRSF0U.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-6213708461484742999</id><published>2008-09-18T12:43:00.000+08:00</published><updated>2008-09-19T09:47:01.506+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-19T09:47:01.506+08:00</app:edited><title>C語言入門</title><content type="html">&lt;span style="font-family:Times New Roman;"&gt;C語言在單晶片設計複雜度不高，變數型態宣告沒有浮點數，常用以下兩種型態。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;char ===&gt; 範圍 0 - 255&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;int ===&gt; 範圍 0 - 65535&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;算術運算子： + 、 - 、 * 、 / 、 %(module)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;關係運算子：&gt;、&lt;、&gt;=(大於等於)、&lt;=(小於等於)、==(等於)、!=(不等於)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;邏輯運算子：&amp;amp;&amp;amp; (AND Gate)、(OR Gate)、!(NOT Gate)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;補數運算子：~ ， 1的補數為0，其他反之。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;※ ；(分號)在C語言中它表示敘述句結束。&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;迴圈語法：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;for 迴圈&lt;br /&gt;&lt;br /&gt;語法：&lt;br /&gt;&lt;br /&gt;for(char x = initial number ; x &lt;= condition number ; x increment or decrement)&lt;br /&gt;&lt;br /&gt;ex .&lt;br /&gt;for(x = 0 ; x &lt;= 9 ; x++)&lt;br /&gt;{&lt;br /&gt;x += 1;(0+1+...+9)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ex . for(;;)，無窮迴圈&lt;br /&gt;&lt;br /&gt;while 迴圈&lt;br /&gt;&lt;br /&gt;語法：&lt;br /&gt;&lt;br /&gt;char x = initial number ;&lt;br /&gt;while(condition number) &lt;=====這裡不加分號&lt;br /&gt;{&lt;br /&gt;statement;&lt;br /&gt;x increment or decrement;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ex.&lt;br /&gt;int x = 0;&lt;br /&gt;while(x &lt; 10)&lt;br /&gt;{&lt;br /&gt;x += 1;(0+1+2....+9)&lt;br /&gt;x++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ex. while(1)，無窮迴圈&lt;br /&gt;&lt;br /&gt;do while 迴圈&lt;br /&gt;&lt;br /&gt;語法：&lt;br /&gt;&lt;br /&gt;char x = initial number ;&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;statement;&lt;br /&gt;x increment or decrement;&lt;br /&gt;}while(condition number); &lt;=====這裡要加分號&lt;br /&gt;&lt;br /&gt;ex.&lt;br /&gt;int x = 0;&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;x += 1;(0+1+2....+9)&lt;br /&gt;x++;&lt;br /&gt;}while(x &lt; 10);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-6213708461484742999?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gneNG1RYaDcwyajAQJMAXpbJaPw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gneNG1RYaDcwyajAQJMAXpbJaPw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gneNG1RYaDcwyajAQJMAXpbJaPw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gneNG1RYaDcwyajAQJMAXpbJaPw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/PhdmQczyg7Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/6213708461484742999/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=6213708461484742999" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6213708461484742999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6213708461484742999?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/PhdmQczyg7Q/c-c-0-255-0-65536-module.html" title="C語言入門" /><author><name>Tabo</name><uri>http://www.blogger.com/profile/08959756014888616879</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/09/c-c-0-255-0-65536-module.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcAR3s9fCp7ImA9WxRSF0w.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-2155664195204068522</id><published>2008-09-14T16:13:00.000+08:00</published><updated>2008-09-18T13:00:46.564+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-18T13:00:46.564+08:00</app:edited><title>8051入門</title><content type="html">&lt;span style="font-family:times new roman;"&gt;一、AT89S51特色&lt;/span&gt; &lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;1. AT89S51 為 MCS-51 相容產品。 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;2. 4K Byte of In - System Programmable (ISP) Flash Memory。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;3. Endurance：1000 Write / Erase Cycles。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;4. 工作電壓範圍為 4.0 - 5.5 伏特。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;5. 可使用振盪器 0 - 33 MHz 。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;6. 128 * 8 bit Internel RAM。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;7. 32條可程式輸出/入線。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;8. 兩個16位元計時/計數器。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;9. 六個中斷來源。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;10.全雙工通用非同步接收及傳送序列通道。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;二、AT89S51接腳及定義：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;該圖片摘錄於ATMEL AT89S51 Datasheet。&lt;/span&gt; &lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_qcfHbbwzWEI/SMzgAg_kF1I/AAAAAAAAAAU/Tfmt9Thrg-8/s1600-h/8051.h1.gif"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245813965440948050" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_qcfHbbwzWEI/SMzgAg_kF1I/AAAAAAAAAAU/Tfmt9Thrg-8/s320/8051.h1.gif" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;VCC：接 5V 正電壓。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;GND：接地腳。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Port 0：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;1. 可作為一個 8 位元輸出 / 入腳。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;2. 外部擴充接腳(例如8255晶片)時可做資料匯流排(D0 - D7)。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;3. 外部擴充記憶體(例如6116晶片)時可做位址匯流排(A0 - A7)。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Port 1：只作為一個 8 位元輸出 / 入腳。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Port 2：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;1. 可作為一個 8 位元輸出 / 入腳。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;2. 外部擴充記憶體做位址匯流排(A8 - A15)。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Port 3：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;1. 可作為一個 8 位元輸出 / 入腳。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;2. 特殊功能：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;● RXD (串列輸入埠 [Serial input poirt])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●TXD (串列輸出埠 [serial output point])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●INT0 (外部中斷0 [External interrupt 0])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●INT1 (外部中斷1 [External interrupt 1])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●T0 (計時/計數中斷[內部為計時；外部為計數])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●T1 (計時/計數中斷[內部為計時；外部為計數])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●WR (外部資料記憶體寫入致能信號)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;●RD (外部資料記憶體讀取致能信號)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;RST l：高準位時(保持2個機械週期)，可重置晶片。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;ALE / PROG：位址拴鎖致能(Address Latch Enable)。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;PSEN：程式儲存致能(Program Store Enable)。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;EA / VPP：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;●高電位：&lt;br /&gt;1. CPU讀取內部程式記憶體(ROM)。8051、8052&lt;br /&gt;2. 有擴充外部記憶體時：當內部記憶體不敷使用時0FFFH(8051)、1FFFH(8052)，自動讀取外&lt;br /&gt;部記憶體。&lt;br /&gt;●低電位：CPU僅讀取外部記憶體(ROM)。&lt;br /&gt;●8751燒錄：利用此腳輸入21V的燒入電壓。&lt;br /&gt;XTAL 1：接石英振盪器。&lt;br /&gt;XTAL 2：接石英振盪器。&lt;br /&gt;三、AT89S51記憶體：&lt;br /&gt;8051的記憶體包括：&lt;br /&gt;1、8051 有 128 Bytes RAM，8052 有 256 Bytes RAM。&lt;br /&gt;2、擴充外部的 RAM，最大為 64K。&lt;br /&gt;3.記憶體位址 00 ~ 7FH 較低位址共128 byte。&lt;br /&gt;4.記憶體位址 80H ~ FFH 較低位址共128 byte。&lt;br /&gt;5.特殊功能暫存器(Special Function Registor)。 &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-2155664195204068522?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pwZtg-4Wp_jmDECyuLZdKwZFCFk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pwZtg-4Wp_jmDECyuLZdKwZFCFk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pwZtg-4Wp_jmDECyuLZdKwZFCFk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pwZtg-4Wp_jmDECyuLZdKwZFCFk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/qfWJACzZetQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/2155664195204068522/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=2155664195204068522" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2155664195204068522?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2155664195204068522?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/qfWJACzZetQ/8051.html" title="8051入門" /><author><name>Tabo</name><uri>http://www.blogger.com/profile/08959756014888616879</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_qcfHbbwzWEI/SMzgAg_kF1I/AAAAAAAAAAU/Tfmt9Thrg-8/s72-c/8051.h1.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/09/8051.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QCQnY6eSp7ImA9WxRSEEs.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-8843370298408566140</id><published>2008-09-11T00:21:00.000+08:00</published><updated>2008-09-11T00:49:23.811+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-11T00:49:23.811+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DS1821、溫度計、8051、PIC" /><title>單晶片開發板製作 - 溫度計(DS1821)模組</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SMf0qb1yuAI/AAAAAAAAABo/bQQNe0iKHMQ/s1600-h/20080910-ThermoMeter.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SMf0qb1yuAI/AAAAAAAAABo/bQQNe0iKHMQ/s320/20080910-ThermoMeter.gif" alt="" id="BLOGGER_PHOTO_ID_5244429300961294338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;選擇 DS1821 感測器的原因是電路簡單, 只要用到一個 IO pin 就可以了.&lt;br /&gt;&lt;br /&gt;撰寫測試程式時, 最初用 SDCC 做編譯, LCD display 正常, 但是溫度顯示一直是零?&lt;br /&gt;後來使用 HI-TECH's PICC 編譯, 就可以正常顯示溫度.&lt;br /&gt;使用 PICC 時, 請把以下的 source code 做成註解.&lt;br /&gt;&lt;br /&gt;typedef unsigned int config;&lt;br /&gt;config at 0x2007 __CONFIG = _XT_OSC &amp;amp; _PWRTE_OFF &amp;amp; _BODEN_OFF &amp;amp; _WDT_OFF &amp;amp; _LVP_OFF;&lt;br /&gt;&lt;br /&gt;用 htc.h 取代 pic/pic16f877a.h&lt;br /&gt;&lt;br /&gt;電路圖如下:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL30woiFtDI/AAAAAAAAABg/A4N47vACegU/s1600-h/20080903-kicad-schema.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL30woiFtDI/AAAAAAAAABg/A4N47vACegU/s320/20080903-kicad-schema.gif" alt="" id="BLOGGER_PHOTO_ID_5241614657680421938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;主程式如下:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt; Copyright (c) 2008 Wizign Ltd.&lt;br /&gt; All Rights Reserved.&lt;br /&gt;&lt;br /&gt; main.c: Main program for demo thermometer&lt;br /&gt;&lt;br /&gt; Version: 1.0.0&lt;br /&gt;&lt;br /&gt; Date: Sep 05, 2008&lt;br /&gt;&lt;br /&gt; Author: YenHung Chen&lt;br /&gt;&lt;br /&gt; E-mail: yhchen@wizign.com&lt;br /&gt;&lt;br /&gt; Revision:&lt;br /&gt; ---------- -----------------------------------------------------------------&lt;br /&gt; 2008/09/05 Created by YenHung Chen, demo thermometer for both 8051 and PIC&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;The IO control&lt;br /&gt;&lt;br /&gt;&lt;&gt;For AT89S52&lt;br /&gt;&lt;br /&gt;LCD display:&lt;br /&gt;There are 8 data pins, which are connected P2.&lt;br /&gt;The control pins are connected to P1_0, P1_1, and P1_2.&lt;br /&gt;&lt;br /&gt;DS1821:&lt;br /&gt;P1_7&lt;br /&gt;&lt;br /&gt;&lt;&gt;For PIC16F877A&lt;br /&gt;&lt;br /&gt;LCD display:&lt;br /&gt;There are 8 data pins, which are connected PORTD&lt;br /&gt;The control pins are connected to RA0, RA1, and RA2.&lt;br /&gt;&lt;br /&gt;DS1821:&lt;br /&gt;RA5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;&lt;br /&gt;#include "global.h"&lt;br /&gt;#include "delay.h"&lt;br /&gt;#include "lcd.h"&lt;br /&gt;#include "thermo.h"&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define IO and global variables&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;&lt;br /&gt;// Configurations&lt;br /&gt;typedef unsigned int config;&lt;br /&gt;config at 0x2007 __CONFIG = _XT_OSC &amp;amp; _PWRTE_OFF &amp;amp; _BODEN_OFF &amp;amp; _WDT_OFF &amp;amp; _LVP_OFF;&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define functions&lt;br /&gt;&lt;br /&gt;/* Initilize parameters before run the main loop */&lt;br /&gt;void InitParams(void)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;LCDInit();&lt;br /&gt;ThermoInit();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Display message on LCD panel */&lt;br /&gt;void DisplayTemperature(void)&lt;br /&gt;{&lt;br /&gt;char tmMsg[16];&lt;br /&gt;int theT;&lt;br /&gt;unsigned char myT;&lt;br /&gt;int hundred;&lt;br /&gt;int tenth;&lt;br /&gt;int ones;&lt;br /&gt;&lt;br /&gt;LCDGoto(0); // goto 1st line&lt;br /&gt;LCDPuts("  WIZIGN LTD.  ");&lt;br /&gt;&lt;br /&gt;// Convert value to string&lt;br /&gt;myT = ThermoReadTemperature();&lt;br /&gt;if(myT &gt; 127){&lt;br /&gt;   theT = (int)(myT - 0xFF);&lt;br /&gt;}else{&lt;br /&gt;   theT = (int)myT;&lt;br /&gt;}&lt;br /&gt;// start&lt;br /&gt;// it can not display correct format in this block&lt;br /&gt;BLOCK&lt;br /&gt;// end&lt;br /&gt;   hundred = (int)(theT/100);&lt;br /&gt;   tenth = (int)((theT%100)/10);&lt;br /&gt;   ones = theT%10;&lt;br /&gt;   tmMsg[1] = 0x30 + hundred;&lt;br /&gt;   tmMsg[2] = 0x30 + tenth;&lt;br /&gt;   tmMsg[3] = 0x30 + ones;&lt;br /&gt;   tmMsg[4] = 0x20;&lt;br /&gt;   tmMsg[5] = 'C';&lt;br /&gt;   tmMsg[6] = 0x20;&lt;br /&gt;   tmMsg[7] = '\0';&lt;br /&gt;&lt;br /&gt;   LCDGoto(0x40); // goto 2nd line&lt;br /&gt;   LCDPuts(tmMsg);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// main program&lt;br /&gt;&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;   // Initilize parameters&lt;br /&gt; InitParams();&lt;br /&gt;&lt;br /&gt;   /* do loop */&lt;br /&gt;   while(1){&lt;br /&gt;    DisplayTemperature();&lt;br /&gt;       // The LCD display and the calculation of time&lt;br /&gt;       // will consume times, so, the delay time is less than 1000 ms.&lt;br /&gt;       DelayMs(900);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-8843370298408566140?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Xzs8qwExPxnFtjnvJpTzwvrA1Ks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xzs8qwExPxnFtjnvJpTzwvrA1Ks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Xzs8qwExPxnFtjnvJpTzwvrA1Ks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xzs8qwExPxnFtjnvJpTzwvrA1Ks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/deeFzmr-1w0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/8843370298408566140/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=8843370298408566140" title="15 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/8843370298408566140?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/8843370298408566140?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/deeFzmr-1w0/ds1821.html" title="單晶片開發板製作 - 溫度計(DS1821)模組" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SMf0qb1yuAI/AAAAAAAAABo/bQQNe0iKHMQ/s72-c/20080910-ThermoMeter.gif" height="72" width="72" /><thr:total>15</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/09/ds1821.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0INRX49cCp7ImA9WxRTFEw.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-8046578382268215282</id><published>2008-09-03T10:15:00.000+08:00</published><updated>2008-09-03T11:13:14.068+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-03T11:13:14.068+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kicad、EDA、MCU、單晶片、OrCAD、Protel" /><title>單晶片開發板製作 - 電子輔助設計工具(EDA) - KiCAD</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30Wnwa6NI/AAAAAAAAABI/cSshnoryKIo/s1600-h/20080903-kicad-3d.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30Wnwa6NI/AAAAAAAAABI/cSshnoryKIo/s320/20080903-kicad-3d.gif" alt="" id="BLOGGER_PHOTO_ID_5241614210795497682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;設計單晶片的功能模組, 需要設計電路以確認程式撰寫時所要控制的 IO 和操作程序.&lt;br /&gt;&lt;br /&gt;除了 OrCAD 和 Protel 之外, 有許多 open source 的免費電子輔助設計工具可以選擇.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/kicad/"&gt;KiCAD&lt;/a&gt; 是一套 open source (GPL) 的軟體, 可以用來設計電子電路圖和印刷電路板, 設計與撰寫 KiCAD 的作者是 Jean-Pierre Charras 是法國 LIS,Laboratoire des Images et des Signaux,的研究人員, 也是 IUT de Saint Martin d'Hères 電子工程和影像處理的教師.&lt;br /&gt;&lt;br /&gt;KiCAD 是一組工具的組合, 包含一個專案管理和四個特定功能的軟體:&lt;br /&gt;&lt;br /&gt;* Eeschema : 設計電子電路圖&lt;br /&gt;* Pcbnew : 設計印刷電路板&lt;br /&gt;* Gerbview : GERBER viewer&lt;br /&gt;* Cvpcb : 設計電路時, 用來選擇電子元件腳本&lt;br /&gt;* Kicad: 專案管理&lt;br /&gt;&lt;br /&gt;另外結合 Wings 3D, 可以模擬印刷電路板的 3D 顯示.&lt;br /&gt;&lt;br /&gt;KiCAD 不只可以在 Windows OS 上操作, 在 Linux 上也可以使用.&lt;br /&gt;&lt;br /&gt;For Fedora Core 9:&lt;br /&gt;&lt;br /&gt;# yum install kicad&lt;br /&gt;&lt;br /&gt;For Ubuntu 8.04&lt;br /&gt;&lt;br /&gt;# apt-get install kicad&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下為 KiCAD 的操作介面:&lt;br /&gt;&lt;br /&gt;Kicad&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30CEts-eI/AAAAAAAAABA/PiRLSmKhdG0/s1600-h/20080903-kicad-main.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30CEts-eI/AAAAAAAAABA/PiRLSmKhdG0/s320/20080903-kicad-main.gif" alt="" id="BLOGGER_PHOTO_ID_5241613857791474146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;eeschema&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL30woiFtDI/AAAAAAAAABg/A4N47vACegU/s1600-h/20080903-kicad-schema.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL30woiFtDI/AAAAAAAAABg/A4N47vACegU/s320/20080903-kicad-schema.gif" alt="" id="BLOGGER_PHOTO_ID_5241614657680421938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cvpcb&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30pBM8gZI/AAAAAAAAABY/HlwttQz1oEo/s1600-h/20080903-kicad-net.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30pBM8gZI/AAAAAAAAABY/HlwttQz1oEo/s320/20080903-kicad-net.gif" alt="" id="BLOGGER_PHOTO_ID_5241614526863671698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pcbnew&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL30gqVBxpI/AAAAAAAAABQ/z2vSE7CZq-4/s1600-h/20080903-kicad-pcb.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL30gqVBxpI/AAAAAAAAABQ/z2vSE7CZq-4/s320/20080903-kicad-pcb.gif" alt="" id="BLOGGER_PHOTO_ID_5241614383284602514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3D 模擬&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30Wnwa6NI/AAAAAAAAABI/cSshnoryKIo/s1600-h/20080903-kicad-3d.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30Wnwa6NI/AAAAAAAAABI/cSshnoryKIo/s320/20080903-kicad-3d.gif" alt="" id="BLOGGER_PHOTO_ID_5241614210795497682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;功能還算完整, 有興趣不妨試試看.&lt;br /&gt;如果想研究程式的開發人員, 也可以上網下載 source code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-8046578382268215282?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2PQeE6WrgjxS9b4Rm1yoqVu6UFI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2PQeE6WrgjxS9b4Rm1yoqVu6UFI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2PQeE6WrgjxS9b4Rm1yoqVu6UFI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2PQeE6WrgjxS9b4Rm1yoqVu6UFI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/tmiNkeRCicQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/8046578382268215282/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=8046578382268215282" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/8046578382268215282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/8046578382268215282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/tmiNkeRCicQ/eda-kicad.html" title="單晶片開發板製作 - 電子輔助設計工具(EDA) - KiCAD" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_u2Ehu8mnwBQ/SL30Wnwa6NI/AAAAAAAAABI/cSshnoryKIo/s72-c/20080903-kicad-3d.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/09/eda-kicad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4HRn09eip7ImA9WxRTE0g.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-7373575882710634893</id><published>2008-09-02T19:20:00.001+08:00</published><updated>2008-09-02T19:28:57.362+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-02T19:28:57.362+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LCD、液晶顯示、8051、PIC、電子鐘、Clock" /><title>單晶片開發板製作 - 數字鐘 (LCD 顯示) 模組</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL0iKqDRrxI/AAAAAAAAAAw/vfrHIAULx4s/s1600-h/20080902-LCDDisplay.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL0iKqDRrxI/AAAAAAAAAAw/vfrHIAULx4s/s320/20080902-LCDDisplay.gif" alt="" id="BLOGGER_PHOTO_ID_5241383107811192594" border="0" /&gt;&lt;/a&gt;採用 Delay 方式計算時間(用 delay 方式計算時間, 會有相當大的誤差值), 並將結果顯示在 LCD 螢幕上.&lt;br /&gt;&lt;br /&gt;所使用的 LCD 型號是 PVC160203PGL01.&lt;br /&gt;&lt;br /&gt;當使用 PIC 16F877A 時, IO 定義如下:&lt;br /&gt;&lt;br /&gt;RA2     LCD_EN&lt;br /&gt;RA1     LCD_RW&lt;br /&gt;RA0     LCD_RS&lt;br /&gt;PORTD   LCD_DATA&lt;br /&gt;&lt;br /&gt;如果使用 AT89S51/52/53 時, IO 定義如下:&lt;br /&gt;&lt;br /&gt;P1_2    LCD_EN&lt;br /&gt;P1_1    LCD_RW&lt;br /&gt;P1_0    LCD_RS&lt;br /&gt;P2      LCD_DATA&lt;br /&gt;&lt;br /&gt;所需的電路圖如下所示:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SL0ibdypoiI/AAAAAAAAAA4/N0CrM5LxynA/s1600-h/20080829-MCUProject-schema-lcd.gif"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SL0ibdypoiI/AAAAAAAAAA4/N0CrM5LxynA/s320/20080829-MCUProject-schema-lcd.gif" alt="" id="BLOGGER_PHOTO_ID_5241383396578009634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;主程式如下所示:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt; Copyright (c) 2008 Wizign Ltd.&lt;br /&gt; All Rights Reserved.&lt;br /&gt;&lt;br /&gt; main.c: Main program for demo LCD display&lt;br /&gt;&lt;br /&gt; Date: Aug 29, 2008&lt;br /&gt;&lt;br /&gt; Author: YenHung Chen&lt;br /&gt;&lt;br /&gt; E-mail: yhchen@wizign.com&lt;br /&gt;&lt;br /&gt; Revision:&lt;br /&gt; ---------- -----------------------------------------------------------------&lt;br /&gt; 2008/08/29 Created by YenHung Chen, demo LCD display for both 8051 and PIC&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;the io="" control=""&gt;&lt;br /&gt;&lt;br /&gt;&lt;&gt;For AT89S52&lt;br /&gt;&lt;br /&gt;There are 8 data pins, which are connected P2.&lt;br /&gt;The control pins are connected to P1_0, P1_1, and P1_2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&gt;For PIC16F877A&lt;br /&gt;&lt;br /&gt;There are 8 data pins, which are connected PORTD&lt;br /&gt;The control pins are connected to RA0, RA1, and RA2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;******************************************************************************/&lt;br /&gt;&lt;br /&gt;#include "global.h"&lt;br /&gt;#include "delay.h"&lt;br /&gt;#include "lcd.h"&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define IO and global variables&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;&lt;br /&gt;// Configurations&lt;br /&gt;typedef unsigned int config;&lt;br /&gt;config at 0x2007 __CONFIG = _XT_OSC &amp;amp; _PWRTE_OFF &amp;amp; _BODEN_OFF &amp;amp; _WDT_OFF &amp;amp; _LVP_OFF;&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;int gTmYr;&lt;br /&gt;unsigned char gTmMon;&lt;br /&gt;unsigned char gTmDay;&lt;br /&gt;unsigned char gTmHr;&lt;br /&gt;unsigned char gTmMin;&lt;br /&gt;unsigned char gTmSec;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define functions&lt;br /&gt;&lt;br /&gt;/* Initialize the begin time */&lt;br /&gt;void InitCurrentTime(int y, unsigned char m, unsigned char d,&lt;br /&gt;                  unsigned char hr, unsigned char min, unsigned char sec){&lt;br /&gt; gTmYr = y;&lt;br /&gt; gTmMon = m;&lt;br /&gt; gTmDay = d;&lt;br /&gt; gTmHr = hr;&lt;br /&gt; gTmMin = min;&lt;br /&gt; gTmSec = sec;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Calculate the progressing time */&lt;br /&gt;void CalculateTime(void)&lt;br /&gt;{&lt;br /&gt; gTmSec++;&lt;br /&gt; if(gTmSec &gt;= 60){&lt;br /&gt;     gTmSec = 0;&lt;br /&gt;     gTmMin++;&lt;br /&gt;     if(gTmMin &gt;= 60){&lt;br /&gt;         gTmMin = 0;&lt;br /&gt;         gTmHr++;&lt;br /&gt;         if(gTmHr &gt;= 24){&lt;br /&gt;             gTmHr = 0;&lt;br /&gt;             gTmDay++;&lt;br /&gt;             switch(gTmMon){&lt;br /&gt;             case 2:&lt;br /&gt;                 if(((gTmYr%4)==0)&amp;amp;&amp;amp;((gTmYr%100)!=0)&amp;amp;&amp;amp;((gTmYr%400)==0)){&lt;br /&gt;                     if(gTmDay &gt;= 29){&lt;br /&gt;                         gTmDay = 1;&lt;br /&gt;                         gTmMon++;&lt;br /&gt;                     }&lt;br /&gt;                 }else{&lt;br /&gt;                     if(gTmDay &gt;= 28){&lt;br /&gt;                         gTmDay = 1;&lt;br /&gt;                         gTmMon++;&lt;br /&gt;                     }&lt;br /&gt;                 }&lt;br /&gt;                 break;&lt;br /&gt;             case 4:&lt;br /&gt;             case 6:&lt;br /&gt;             case 9:&lt;br /&gt;             case 11:&lt;br /&gt;                 if(gTmDay &gt;= 30){&lt;br /&gt;                     gTmDay = 1;&lt;br /&gt;                     gTmMon++;&lt;br /&gt;                 }&lt;br /&gt;                 break;&lt;br /&gt;             default:    // 31 days/month&lt;br /&gt;                 if(gTmDay &gt;= 31){&lt;br /&gt;                     gTmDay = 1;&lt;br /&gt;                     gTmMon++;&lt;br /&gt;                     if(gTmMon &gt;= 12){&lt;br /&gt;                         gTmMon = 1;&lt;br /&gt;                         gTmYr++;&lt;br /&gt;                     }&lt;br /&gt;                 }&lt;br /&gt;                 break;&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Initilize parameters before run the main loop */&lt;br /&gt;void InitParams(void)&lt;br /&gt;{&lt;br /&gt; lcd_init();&lt;br /&gt; InitCurrentTime(2008, 9, 1, 10, 24, 12);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Power value of 10 */&lt;br /&gt;int PowerTen(int p)&lt;br /&gt;{&lt;br /&gt; int ret = 1;&lt;br /&gt; while(--p &gt; 0){&lt;br /&gt;     ret *= 10;&lt;br /&gt; }&lt;br /&gt; return ret;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Convert value to string */&lt;br /&gt;void NumToStr(char* pMsg, int v, int len)&lt;br /&gt;{&lt;br /&gt; int i;&lt;br /&gt; int p;&lt;br /&gt; for(i=0; i&lt;len;&gt;&lt;br /&gt;     p = PowerTen(len-i);&lt;br /&gt;     pMsg[i] = 0x30 + (int)(v/p);&lt;br /&gt;     v %= p;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Convert time value to string message */&lt;br /&gt;void GetTimeMsg(char *pMsg)&lt;br /&gt;{&lt;br /&gt; NumToStr(&amp;amp;pMsg[0], gTmMon, 2);&lt;br /&gt; pMsg[2] = '/';&lt;br /&gt; NumToStr(&amp;amp;pMsg[3], gTmDay, 2);&lt;br /&gt; pMsg[5] = ' ';&lt;br /&gt; NumToStr(&amp;amp;pMsg[6], gTmHr, 2);&lt;br /&gt; pMsg[8] = ':';&lt;br /&gt; NumToStr(&amp;amp;pMsg[9], gTmMin, 2);&lt;br /&gt; pMsg[11] = ':';&lt;br /&gt; NumToStr(&amp;amp;pMsg[12], gTmSec, 2);&lt;br /&gt; pMsg[14] = 0x00;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Display message on LCD panel */&lt;br /&gt;void DisplayMessage(void)&lt;br /&gt;{&lt;br /&gt; char tmMsg[16];&lt;br /&gt;&lt;br /&gt; lcd_goto(0);    // goto 1st line&lt;br /&gt; lcd_puts("  WIZIGN LTD.  ");&lt;br /&gt;&lt;br /&gt; // Convert value to string&lt;br /&gt; GetTimeMsg(tmMsg);&lt;br /&gt; lcd_goto(0x40);    // goto 2nd line&lt;br /&gt; lcd_puts(tmMsg);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// main program&lt;br /&gt;&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt; // Initilize parameters&lt;br /&gt; InitParams();&lt;br /&gt;&lt;br /&gt; /* do loop */&lt;br /&gt; while(1){&lt;br /&gt;     CalculateTime();&lt;br /&gt;     DisplayMessage();&lt;br /&gt;     // The LCD display and the calculation of time&lt;br /&gt;     // will consume times, so, the delay time is less than 1000 ms.&lt;br /&gt;     DelayMs(900);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/len;&gt;&lt;/the&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-7373575882710634893?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kMTr5Fevoswo5emEAZllfqI5oqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kMTr5Fevoswo5emEAZllfqI5oqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kMTr5Fevoswo5emEAZllfqI5oqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kMTr5Fevoswo5emEAZllfqI5oqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/RLc2ePYOrUY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/7373575882710634893/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=7373575882710634893" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/7373575882710634893?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/7373575882710634893?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/RLc2ePYOrUY/lcd.html" title="單晶片開發板製作 - 數字鐘 (LCD 顯示) 模組" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_u2Ehu8mnwBQ/SL0iKqDRrxI/AAAAAAAAAAw/vfrHIAULx4s/s72-c/20080902-LCDDisplay.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/09/lcd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4ARX04fCp7ImA9WxdaGEw.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-6529354672863678729</id><published>2008-08-27T13:54:00.000+08:00</published><updated>2008-08-27T14:19:04.334+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-27T14:19:04.334+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="8051、PIC、LED" /><title>單晶片開發板製作 - 測試程式 - 跑馬燈</title><content type="html">考量讓 8051 和 PIC 使用相同的 source code, 所以定義以下常數:&lt;br /&gt;&lt;br /&gt;#define MCU_8051 - for 8051 時, 使用此常數&lt;br /&gt;#define MCU_PIC - for PIC 時, 使用此常數&lt;br /&gt;&lt;br /&gt;方式一, 控制 8 個 LED 燈, 使輪流點亮, 定義函式 void FlashLightOne(void)&lt;br /&gt;*&gt;AT89S52  - 使用 P1&lt;br /&gt;*&gt;PIC16F877A - 使用 PORTB&lt;br /&gt;&lt;br /&gt;方式二, 控制 8 個 LED 燈, 同時間有 2 個燈會亮, 當最先亮的燈滅掉, 下一個燈會點亮., 定義函式 void FlashLightTwo(void)&lt;br /&gt;*&gt;AT89S51 - 使用 P1&lt;br /&gt;*&gt;PIC16F877A - 使用 PORTB&lt;br /&gt;&lt;br /&gt;主程式架構如下:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt; Copyright (c) 2008 Wizign Ltd.&lt;br /&gt;    All Rights Reserved.&lt;br /&gt;&lt;br /&gt; main.c: Main program for demo flash light&lt;br /&gt;&lt;br /&gt; Date: Aug 27, 2008&lt;br /&gt;&lt;br /&gt; Author: YenHung Chen&lt;br /&gt;&lt;br /&gt; E-mail: yhchen@wizign.com&lt;br /&gt;&lt;br /&gt; Revision:&lt;br /&gt; ---------- -----------------------------------------------------------------&lt;br /&gt; 2008/08/27 Created by YenHung Chen, demo flash light for both 8051 and PIC&lt;br /&gt;&lt;br /&gt; ******************************************************************************/&lt;br /&gt;/*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;The IO control&gt;&lt;br /&gt;&lt;br /&gt;&lt;&gt;For AT89S52&lt;br /&gt;There are 8 LEDs, which are connected P1.&lt;br /&gt;Each pins of P1 is connected to one LED ligth.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&gt;For PIC16F877A&lt;br /&gt;There are 8 LEDs, which are connected PORTB&lt;br /&gt;Each pins of PORTB is connected to one LED ligth.&lt;br /&gt;&lt;br /&gt; ******************************************************************************/&lt;br /&gt;&lt;br /&gt;#define MCU_8051&lt;br /&gt;//#define MCU_PIC&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;#include &lt;pic/pic16f877a.h&gt;&lt;br /&gt;#else   // default is MCU_8051&lt;br /&gt;#include &lt;mcs51/at89x52.h&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#include "delay.h"&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define IO and global variables&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;// Configurations&lt;br /&gt;typedef unsigned int config;&lt;br /&gt;config at 0x2007 __CONFIG = _RC_OSC &amp; _PWRTE_ON &amp; _BODEN_OFF &amp; _WDT_OFF &amp; _LVP_OFF;&lt;br /&gt;#define gLEDs PORTB&lt;br /&gt;#else   // default is MCU_8051&lt;br /&gt;#define gLEDs P1&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;int gCount = 0;&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// define functions&lt;br /&gt;&lt;br /&gt;/* Initilize parameters before run the main loop */&lt;br /&gt;void InitParams(void)&lt;br /&gt;{&lt;br /&gt;    gLEDs = 0xFF;&lt;br /&gt;&lt;br /&gt;#ifdef MCU_PIC&lt;br /&gt;    TRISB = 0x00;  // output&lt;br /&gt;#endif&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Make a LED ON each time */&lt;br /&gt;void FlashLightOne(void)&lt;br /&gt;{&lt;br /&gt;    unsigned char status;&lt;br /&gt;&lt;br /&gt;    status = 1 &lt;&lt; gCount++;&lt;br /&gt;    if(gCount &gt;= 8)&lt;br /&gt;        gCount = 0;&lt;br /&gt;&lt;br /&gt;    gLEDs = ~status;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Make two LED ON each time,&lt;br /&gt;   while the preview LED is OFF, the next new LED is ON */&lt;br /&gt;void FlashLightTwo(void)&lt;br /&gt;{&lt;br /&gt;    unsigned char status;&lt;br /&gt;&lt;br /&gt;    status = 1 &lt;&lt; gCount++;&lt;br /&gt;    if(gCount &gt;= 8)&lt;br /&gt;        gCount = 0;&lt;br /&gt;&lt;br /&gt;    if(status == 0x80){&lt;br /&gt;        status |= 1;&lt;br /&gt;    }else{&lt;br /&gt;        status |= (status &lt;&lt; 1);&lt;br /&gt;    }&lt;br /&gt;    gLEDs = ~status;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;// main program&lt;br /&gt;&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;    // Initilize parameters&lt;br /&gt;    InitParams();&lt;br /&gt;&lt;br /&gt;    /* do loop */&lt;br /&gt;    while(1){&lt;br /&gt;        FlashLightOne();&lt;br /&gt;        DelayMs(1000);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-6529354672863678729?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xSyvPwP6I5N66rR_GcSsuM5mH98/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xSyvPwP6I5N66rR_GcSsuM5mH98/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xSyvPwP6I5N66rR_GcSsuM5mH98/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xSyvPwP6I5N66rR_GcSsuM5mH98/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/cV8r9Xk23q8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/6529354672863678729/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=6529354672863678729" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6529354672863678729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/6529354672863678729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/cV8r9Xk23q8/blog-post_4060.html" title="單晶片開發板製作 - 測試程式 - 跑馬燈" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/08/blog-post_4060.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ANRnkyeSp7ImA9WxRTE0g.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-2963971845383127661</id><published>2008-08-27T13:33:00.000+08:00</published><updated>2008-09-02T19:43:17.791+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-02T19:43:17.791+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fedora、ubuntu、sdcc、codeblocks、gputils" /><title>單晶片開發板製作 - 應用的開發工具</title><content type="html">相關程式開發, 計畫在 Linux 的作業環境下進行, 所使用的程式套件如下所述:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fedora Core 9/Ubuntu 8.04 - PC 上使用的作業系統 &lt;/li&gt;&lt;li&gt;sdcc - 免費的 8051/AVR/Z80 編譯器 &lt;/li&gt;&lt;li&gt;gputils - GCC PIC 的編譯器 &lt;/li&gt;&lt;li&gt;codeblocks - IDE 開發環境 &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;安裝方式:&lt;br /&gt;&lt;br /&gt; * In Fedora Core 9&lt;br /&gt;&lt;br /&gt;# yum install gputils&lt;br /&gt;# yum install sdcc&lt;br /&gt;# yum install codeblocks codeblocks-contrib&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; * In Ubuntu 8.04&lt;br /&gt;&lt;br /&gt;# vim /etc/apt/sources.list&lt;br /&gt;   deb http://apt.wxwidgets.org/ gutsy-wx main&lt;br /&gt;   deb http://lgp203.free.fr/ubuntu/ gutsy universe&lt;br /&gt;  &lt;br /&gt;# wget -q http://apt.wxwidgets.org/key.asc -O- | apt-key add -&lt;br /&gt;# wget -q http://lgp203.free.fr/public.key -O- | apt-key add -&lt;br /&gt;&lt;br /&gt;# apt-get update&lt;br /&gt;# apt-get install gputils&lt;br /&gt;# apt-get install sdcc&lt;br /&gt;# apt-get install codeblocks&lt;br /&gt;# apt-get install codeblocks-contrib&lt;br /&gt;# apt-get install libwxsmithlib0&lt;br /&gt;&lt;br /&gt;如果想要有比較好的編譯(compiling)效果,&lt;br /&gt;e.g. binary code 比較小, 參考的資源比較完整&lt;br /&gt;可以考慮使用 &lt;a href="http://www.htsoft.com/"&gt;HI-TECH&lt;/a&gt; 的 PICC(for PIC) 或 for 8051 C compiler.&lt;br /&gt;HI-TECH 並提供與 eclipse 整合的 IDE 開發環境 - HI-TIDE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-2963971845383127661?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PikqAKHvA_DcPU7ywAa1fPePXwE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PikqAKHvA_DcPU7ywAa1fPePXwE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PikqAKHvA_DcPU7ywAa1fPePXwE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PikqAKHvA_DcPU7ywAa1fPePXwE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/uU7RL8YAhfU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/2963971845383127661/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=2963971845383127661" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2963971845383127661?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2963971845383127661?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/uU7RL8YAhfU/blog-post_26.html" title="單晶片開發板製作 - 應用的開發工具" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/08/blog-post_26.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUFQH85eSp7ImA9WxdaE00.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-2063401706883604055</id><published>2008-08-21T16:29:00.000+08:00</published><updated>2008-08-21T16:43:31.121+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-21T16:43:31.121+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="單晶片、8051、PIC" /><title>單晶片開發板製作 - 主控制單元模組</title><content type="html">希望做一塊開發板可以同時測試 8051 和 PIC, 程式可以透過 RS-232 直接燒錄,&lt;br /&gt;外接電源在 9V~12V 之間, 轉換成穩壓電源 5V 和 3.3V.&lt;br /&gt;&lt;br /&gt;目前選定的 MCU 是 ATMEL 的 AT89S51, AT89S52, 或 AT89S53 和 Microchips 的 PIC16F877A.&lt;br /&gt;&lt;br /&gt;開發板雛型&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pBBy1qkI/AAAAAAAAAAQ/UhqLHchf-kY/s1600-h/20080817-MCUProject-mcu.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pBBy1qkI/AAAAAAAAAAQ/UhqLHchf-kY/s320/20080817-MCUProject-mcu.gif" alt="" id="BLOGGER_PHOTO_ID_5236887039340030530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;電路圖&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pgBsCvBI/AAAAAAAAAAY/0PZn6Tbhqlk/s1600-h/20080817-MCUProject-schema-mcu.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pgBsCvBI/AAAAAAAAAAY/0PZn6Tbhqlk/s320/20080817-MCUProject-schema-mcu.gif" alt="" id="BLOGGER_PHOTO_ID_5236887571887471634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pujTb7wI/AAAAAAAAAAg/-Q25HQjaPfg/s1600-h/20080817-MCUProject-schema-pwr.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pujTb7wI/AAAAAAAAAAg/-Q25HQjaPfg/s320/20080817-MCUProject-schema-pwr.gif" alt="" id="BLOGGER_PHOTO_ID_5236887821429239554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SK0p7kHkl9I/AAAAAAAAAAo/gRcNtneh0P8/s1600-h/20080817-MCUProject-schema-conn.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_u2Ehu8mnwBQ/SK0p7kHkl9I/AAAAAAAAAAo/gRcNtneh0P8/s320/20080817-MCUProject-schema-conn.gif" alt="" id="BLOGGER_PHOTO_ID_5236888044986210258" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-2063401706883604055?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p4qpr0-v67LsuDltDgIkhhrjZdc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4qpr0-v67LsuDltDgIkhhrjZdc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p4qpr0-v67LsuDltDgIkhhrjZdc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4qpr0-v67LsuDltDgIkhhrjZdc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/cIllfmt7vYc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/2063401706883604055/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=2063401706883604055" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2063401706883604055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/2063401706883604055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/cIllfmt7vYc/blog-post_21.html" title="單晶片開發板製作 - 主控制單元模組" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_u2Ehu8mnwBQ/SK0pBBy1qkI/AAAAAAAAAAQ/UhqLHchf-kY/s72-c/20080817-MCUProject-mcu.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/08/blog-post_21.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUMR3Y9fSp7ImA9WxdaE00.&quot;"><id>tag:blogger.com,1999:blog-5807842345457637093.post-67394986696863780</id><published>2008-08-21T15:57:00.000+08:00</published><updated>2008-08-21T16:11:26.865+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-21T16:11:26.865+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="單晶片、8051、PIC" /><title>單晶片開發板製作</title><content type="html">看了很多單晶片(8051 和 PIC16F)的資料, 想要驗證所學的知識, 所以計劃自行製作單晶片開發板.&lt;br /&gt;開發的主軸是以建構模組的方式進行, 計劃發展的模組, 如下所列:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;主控制單元模組&lt;/li&gt;&lt;li&gt;數字鐘 (LCD 顯示) 模組&lt;/li&gt;&lt;li&gt;溫度計模組&lt;/li&gt;&lt;li&gt;USB 信號傳輸模組&lt;/li&gt;&lt;li&gt;红外線遙控器模組 - 發射器與接收器&lt;/li&gt;&lt;li&gt;無線傳輸遙控器模組 - 發射器與接收器&lt;/li&gt;&lt;li&gt;馬達控制模組&lt;/li&gt;&lt;li&gt;電波鐘模組&lt;/li&gt;&lt;li&gt;音樂盒模組&lt;/li&gt;&lt;li&gt;電子琴模組&lt;/li&gt;&lt;li&gt;RS 232 信號傳輸模組 - 人機介面&lt;/li&gt;&lt;li&gt;CAN 信號傳輸模組 - 行車紀錄系統&lt;/li&gt;&lt;li&gt;定時開關模組&lt;/li&gt;&lt;li&gt;觸控開關模組&lt;/li&gt;&lt;li&gt;光控開關模組&lt;/li&gt;&lt;li&gt;自走車&lt;/li&gt;&lt;li&gt;遙控車 (遙控控制, 直流, 交流與步進馬達控制)&lt;/li&gt;&lt;li&gt;交通號誌燈&lt;/li&gt;&lt;li&gt;LiH 充電器&lt;/li&gt;&lt;li&gt;住家安全警報系統 - 整合應用&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5807842345457637093-67394986696863780?l=wizign.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NDgSFrfiGLcEhrlJHPSHMkxFlDo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NDgSFrfiGLcEhrlJHPSHMkxFlDo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NDgSFrfiGLcEhrlJHPSHMkxFlDo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NDgSFrfiGLcEhrlJHPSHMkxFlDo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Wizign/~4/_Li_8M-dwd8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://wizign.blogspot.com/feeds/67394986696863780/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5807842345457637093&amp;postID=67394986696863780" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/67394986696863780?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5807842345457637093/posts/default/67394986696863780?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Wizign/~3/_Li_8M-dwd8/blog-post.html" title="單晶片開發板製作" /><author><name>Causality</name><uri>http://www.blogger.com/profile/03290405206240803331</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://wizign.blogspot.com/2008/08/blog-post.html</feedburner:origLink></entry></feed>

