顯示具有 pxa300 標籤的文章。 顯示所有文章
顯示具有 pxa300 標籤的文章。 顯示所有文章

2009年11月16日

pxa300 和 release-sourceforge 的/init/fstab 比較(rootfs) pxa300 MMC卡fstab實作

延伸閱讀:
http://blog.xuite.net/travisnauto/linuxgo/19857186

E:\cygwin\home\Jim\release-sourceforge\android-pxa270\rootfs\rootfs_from_tiny_rootfs_tgz\etc\fstab

E:\cygwin\home\Jim\300\src\preview-kit\rootfs\rootfs\etc\fstab

比較過後的結果:一樣
#/dev/root  /            defaults 0 0
none   /tmp      ramfs   defaults 0 0
none   /proc     proc    defaults 0 0
none   /dev/pts  devpts  mode=0622  0 0
sysfs  /sys      sysfs   defaults   0 0
至於fstab內容的意義,請見下方解說:


引用
陈景忠的空间
http://hi.baidu.com/jingzhongchen/blog/item/8e6f552dcead7ce98b139952.html

有很多人經常修改/etc/fstab檔,但是其中卻有很多人對這個檔所表達的意義不太清楚,因為只要按照一定的模式,就可以輕而易舉地添加一行掛載資訊,而不需要完全理解其中的原理。

/etc/fstab是用來存放檔案系統的靜態資訊的檔。位於/etc/目錄下,可以用命令less /etc/fstab 來查看,如果要修改的話,則用命令 vi /etc/fstab 來修改。

當系統啟動的時候,系統會自動地從這個檔讀取資訊,並且會自動將此檔中指定的檔案系統掛載到指定的目錄。下面我來介紹如何在此檔下填寫資訊。

在這個檔下,我們要關注的是它的六個域,分別為:file system、mount point、type 、options、dump、pass。下面將詳細介紹這六個域的詳細意義。

1、file system 這裡用來指定你要掛載的檔案系統的設備名稱或塊資訊,也可以是遠端的檔案系統。做過嵌入式linux開發的朋友都可能知道 mount 192.168.1.56:/home/nfs /mnt/nfs/ -o nolock (可以是其他IP)命令所代表的意義。它的任務是把IP為192.168.1.56的遠端主機上的/home/nfs/目錄掛載到本機的/mnt/nfs /目錄之下。如果要把它寫進/etc/fstab檔中,file system這部分應填寫為:/192.168.1.56:/home/nfs/。

如果想把本機上的某個設備(device)掛載上來,寫法如:/dev/sda1、/dev/hda2或/dev/cdrom,其中,/dev/sda1 表示第一個串口硬碟的第一個分區,也可以是第一個SCSI硬碟的第一個分區,/dev/hda1表示第一個IDE硬碟的第一個分區,/dev/cdrom 表示光碟機。

此外,還可以label(標籤)或UUID(Universally Unique Identifier全域唯一識別碼)來表示。用label表示之前,先要e2label創建標籤,如:e2label /dir_1 /dir_2,其意思是說用/dir_2來表示/dir_1的名稱。然後,再在/etc/fstab下按如下形式添加:LABEL=/dir_2 /dir_2 。重啟後,系統就會將/dir_1掛載到/dir_2目錄上。對於UUID,可以用vol_id -u /dev/sdax來獲取。比如我想掛載第一塊硬碟的第十一個分區,先用命令vol_id -u /dev/sda11 來取得UUID,比如是:5dc08a62-3472-471b-9ef5-0a91e5e2c126,然後在這個域上填寫: UUID=5dc08a62-3472-471b-9ef5-0a91e5e2c126,即可表示/dev/sda11。Red Hat linux 一般會使用label,而Ubuntu linux 一般會用UUID。

2、mount point 掛載點,也就是自己找一個或創建一個dir(目錄),然後把檔案系統掛到這個目錄上,然後就可以從這個目錄中訪問要掛載檔案系統。對於swap分區,這個域應該填寫:none,表示沒有掛載點。

3、type 這裡用來指定檔案系統的類型。下面的檔案系統都是目前Linux所能支持的:adfs、befs、cifs、ext3、 ext2、ext、iso9660、kafs、minix、msdos、vfat、umsdos、proc、reiserfs、swap、 squashfs、nfs、hpfs、ncpfs、ntfs、affs、ufs。

4、options 這裡用來填寫設置選項,各個選項用逗號隔開。由於選項非常多,而這裡篇幅有限,所以不再作詳細介紹,如需瞭解,請用命令 man mount 來查看。但在這裡有個非常重要的關鍵字需要瞭解一下:defaults,它代表包含了選項rw,suid,dev,exec,auto,nouser和 async。

5、dump 此處為1的話,表示要將整個裡的內容備份;為0的話,表示不備份。現在很少用到dump這個工具,在這裡一般選0。

6、pass 這裡用來指定如何使用fsck來檢查硬碟。如果這裡填0,則不檢查;掛載點為 / 的(即根分區),必須在這裡填寫1,其他的都不能填寫1。如果有分區填寫大於1的話,則在檢查完根分區後,接著按填寫的數字從小到大依次檢查下去。同數字的同時檢查。比如第一和第二個分區填寫2,第三和第四個分區填寫3,則系統在檢查完根分區後,接著同時檢查第一和第二個分區,然後再同時檢查第三和第四個分區。




實作部分:pxa300


修改/etc/fstab內容(先行在開機init過程中做mount的動作)

新增一行:

none /tmp ramfs defaults 0 0
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
sysfs /sys sysfs defaults 0 0
/dev/mss/blk0p1 /home/jim/mountsd ext2 defaults 0 0

開機訊息:
Device major:254, first minor:0
mss/blk0: p1


[root@Linux /]#df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/mtdblock2 49152 41456 7696 84% /
/dev/mss/blk0p1 30333 383 28384 1% /home/jim/mountsd
[root@Linux /]#cd /home/jim/mountsd/
[root@Linux mountsd]#ls
5465456165 jimkokokokok lost+found

2009年11月15日

pxa300 回碩教學 及 記憶體空間配置圖

參考文件:
XSBASE300-S LINUX測試手冊.pdf


1.掌握pxa300 nandflash記憶體配置

0x60000(start)

   0x200000(kernel image大小 2MB最大(tftp和下nandwrite指令時不需設定kernel image大小))

0x260000(start)

   0x3000000(filesysytem大小 39.2MB最大)

0x8000000(start)

   0x40000(wince的eboot.nb存放區)

   nk.bin存放區(類似wince 的filesystem 約22.9MB)


2.掌握重新燒寫pxa300原本kernel image方法(zImage:1.7MB)

(1)進入minicom: 在等待k7或k8選項時按下enter-->可進入blob bootloader
(2)設定ip位址:
setip server 140.129.20.45
setip client 140.129.20.156

ps.140.129.20.45為ubuntu hosy
140.129.20.156為pxa300平台的ip

(3)把kernel image檔案(zImage:1.7mb)放進host的/var/lib/tftpboot中
(4)bootloader輸入tftp zImage
會自動抓/var/lib/tftpboot中的檔案
(5)nandwrite -z 0x80800000 0x60000 0x200000
寫到flash中,重新開機即可



3.linux filesystem燒寫步驟部分,
掌握重新燒寫pxa300原本QT filesystem方法(rootfs.jffs2)

(1)進入minicom: 在等待k7或k8選項時按下enter-->可進入blob bootloader
(2)設定ip位址:
setip server 192.168.0.5
setip client 192.168.0.20

ps.192.168.0.5為ubuntu hosy
192.168.0.20為pxa300平台的ip

(3)把filesystem image檔案(rootfs.jffs2:39.2mb)放進host的/var/lib/tftpboot中
(4)bootloader輸入tftp rootfs.jffs2
會自動抓/var/lib/tftpboot中的檔案
(5)nanderase -j 0x260000 0x3000000
(6)nandwrite -j 0x80800000 0x260000 0x2740000
寫到flash中,重新開機即可

 (7)0x2740000要看filesystem的大小,要設定成比他大一點的空間
(8)重新開機後,qt會要求設定地區和時間,不過下次開機時就不用設定觸控點了(以前為啥要?)

ps.仍有問題部份,待下次解決:
1.為啥進入linux後,不定時會無法顯示觸控螢幕的畫面,但是還是可以進入filesystem,一定要在reboot一次才可以正常顯示linux畫面
2.wince的filesystem 是否為nk.bin? ans:應該是啦~反正就是wince
3.為啥pxa 300 linux中,usb插進去不能讀到檔案? ans:可讀 但還不能寫

pxa300 QT filesystem掌握,usb仍舊寫不進去資料

今天依舊有陽光,但是mmc有個怪問題 (此篇文章全部是用廠商提供的source去編譯出來的kernel+filesystem 2.6.21)

1.仿照之前做的mount /dev/mss/blk1p1 /home/jim/mountsd/掛不上去
去了pxa300的/dev下看,並沒有mms資料夾

原來原因是在未開機之前就插入mmc卡,開機後拔掉在重新插就可以看到訊息:


[root@Linux mss]#mount /dev/mss/blk0p1 /home/jim/mountsd/                      
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended          
[root@Linux mss]#cd /home/jim/mountsd/                                         
[root@Linux mountsd]#ls                                                        
jimkokokokok  lost+found


但是偵測到的卻不是之前的blk1p1了,而是blk0p1


插入usb顯示的訊息:(4gUSB用ubuntu gparted軟體格式化為ext2)
 

[root@Linux /dev]#usb 1-1: new full speed USB device using pxa3xx-ohci and addr9
usb 1-1: device not accepting address 19, error -62                            
usb 1-1: new full speed USB device using pxa3xx-ohci and address 21            
usb 1-1: configuration #1 chosen from 1 choice                                 
scsi1 : SCSI emulation for USB Mass Storage devices                            
scsi 1:0:0:0: Direct-Access     USB 2.0  USB Flash Drive  1100 PQ: 0 ANSI: 0 CCS
SCSI device sda: 7831552 512-byte hdwr sectors (4010 MB)                       
sda: Write Protect is off                                                      
sda: assuming drive cache: write through                                       
SCSI device sda: 7831552 512-byte hdwr sectors (4010 MB)                       
sda: Write Protect is off                                                      
sda: assuming drive cache: write through                                       
 sda: sda1 sda2 < sda5 >                                                       
sd 1:0:0:0: Attached scsi removable disk sda                                   
                     
[root@Linux /dev]#mount sda /home/jim/mountusb/                                
VFS: Can't find an ext2 filesystem on dev sda.                                 
FAT: invalid media value (0xb9)                                                
VFS: Can't find a valid FAT filesystem on dev sda.                             
FAT: invalid media value (0xb9)                                                
VFS: Can't find a valid FAT filesystem on dev sda.                             
mount: Mounting /dev/sda on /home/jim/mountusb failed: Invalid argument        
[root@Linux /dev]#mount sda1 /home/jim/mountusb/                               
EXT2-fs warning: checktime reached, running e2fsck is recommended              
[root@Linux /dev]#cd /home/jim/mountusb/                                       
[root@Linux mountusb]#ls                                                       
lost+found        


但是可以看見usb中的檔案卻不能寫入,奇怪


另外,幫pxa300的filesystem(Qt)作好準備,以免到時候搞壞啦

                             

 Press K7 will go to linux OS                                                  
Press K8 will go to wince OS                                                  
.                                                                             
SMC91x detected with MAC address 00-00-00-00-00-00                            
Searching for network... network found, but auto-negotiate failed.            
                                                                              
Autoboot aborted                                                              
Type "help" to get a list of commands                                         
blob> setip server 192.168.0.5                                                
Set IP to 192.168.0.5                                                         
blob> setip client 192.168.0.20                                               
Set IP to 192.168.0.20                                                        
blob> tftp rootfs.jffs2                                                       
smc_send: memory allocation time out. (要等一下子)                                         
TFTPing rootfs.jffs2*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
received 80224 blocks (41074172 bytes)                                        
tftp_cmd: file 'rootfs.jffs2' loaded via tftp to address 0x80800000.          
blob> nanderase -j 0x260000 0x3000000                                         
Erase 0x3000000 length data from flash: 0x260000                              
Erase flash from 0x260000, length 0x3000000                                   
...............................................................................e
blob> nandwrite -j 0x80800000 0x260000 0x2740000                              
Write 0x2740000 length data from RAM: 0x80800000 to flash: 0x260000           
Write flash from 0x260000, length 0x2740000                                   
Erase flash from 0x260000, length 0x2740000                                   
...............................................................................e
...............................................................................e
blob>

第一次進去時要先設定時間和地區~(沒設定也沒差)


rootfs.jffs2為放在pxa300中的rel/target/中

最後wince還是可以順利進去,接下來flash就任我搞了!


















2009年11月14日

tftp安裝 littleton的config到底是啥? qvga_transfer_config() error處理

早晨起床,忽然想把pxa300網路問題搞定,於是本來在.config好好的設定檔如下

CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on console=ttyS0,38400 mem=64M"
改為
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 ip=192.168.0.21:192.168.0.1::255.255.255.0::eth0:on console=ttyS0,38400 mem=64M"

同時,在~/300/src/preview-kit/linux/arch/arm/kernel/head.S中新增了bootloader問題
ENTRY(stext)
LDR r1,=0x56C

安裝tftp

sudo apt-get install tftpd-hpa xinetd
cat /etc/xinetd.conf
sudo vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

cd /etc/
jim@jim-ubuntu:/etc/default$ cat tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON="no"
OPTIONS="-l -s /var/lib/tftpboot"
jim@jim-ubuntu:/etc/default$ sudo vim tftpd-hpa
jim@jim-ubuntu:/etc/default$ cat tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

jim@jim-ubuntu:/etc/default$ sudo /etc/init.d/tftpd-hpa restart
Restarting HPA's tftpd: in.tftpd.
jim@jim-ubuntu:/etc/default$ netstat -l | grep tftp
udp 0 0 *:tftp *:*

sudo chmod 777 /var/lib/tftpboot

sudo cp /home/jim/300/src/preview-kit/linux/arch/arm/boot/zIamge /var/lib/tftpboot
sudo chmod 777 zImage

把zIMage寫進flash中開機會卡
Starting kernel at 0x80800000...

Uncompressing Linux...
we will gunzip the kernel 1.
................................................................................
done, booting the kernel.

把r1砍掉,在~/300/src/preview-kit/linux/arch/arm/kernel/head.S中
ENTRY(stext)
LDR r1,=0x56C


還是一樣
Starting kernel at 0x80800000...                                               
                                                                               
Uncompressing Linux...                                                         
we will gunzip the kernel 1.                                                   
................................................................................
 done, booting the kernel.  卡住啦

修改.config
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 ip=192.168.0.20:192.168.0.5::255.255.255.0::eth0:on console=ttyS0,38400 mem=64M"

仍卡住同地方

修改.config(最原本的)
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on console=ttyS0,38400 mem=64M"

還是一樣!哇哩咧!!!

讀取在arch/arm/configs/中的
littletonl-org_defconfig
重新編譯

arch/arm/mach-pxa/littleton.c: In function 'littleton_irda_transceiver_mode':
arch/arm/mach-pxa/littleton.c:377: error: 'MFP_PIN_GPIO137' undeclared (first use in this function)
arch/arm/mach-pxa/littleton.c:377: error: (Each undeclared identifier is reported only once
arch/arm/mach-pxa/littleton.c:377: error: for each function it appears in.)
make[1]: *** [arch/arm/mach-pxa/littleton.o] Error 1
make: *** [arch/arm/mach-pxa] Error 2

trace code找不到0137這行,只好先讀取別的config
/home/jim/300/src/preview-kit/linux/arch/arm/configs/littletonlv_defconfig

但是!
In file included from include/asm/arch/hardware.h:142,
                 from include/asm/hardware.h:16,
                 from include/asm/arch/io.h:9,
                 from include/asm/io.h:76,
                 from init/main.c:58:
include/asm/arch/littleton.h:768:2: error: #error "please define MFP pins for your platform!"
make[1]: *** [init/main.o] Error 1
make: *** [init] Error 2

換成littletonl_old_defconfig試試看
/home/jim/300/src/preview-kit/linux/arch/arm/configs/littletonl_old_defconfig


rch/arm/mach-pxa/littleton.c: In function 'littleton_irda_transceiver_mode':
arch/arm/mach-pxa/littleton.c:377: error: 'MFP_PIN_GPIO137' undeclared (first use in this function)

看來不解決這個MFP_PIN_GPI0137不行了

回過頭來載入
/home/jim/300/src/preview-kit/linux/arch/arm/configs/littletonl_defconfig
載入後觀察一下是怎樣才可以pass的:
編譯訊息如下:
arch/arm/mach-pxa/clock.o
  CC      arch/arm/mach-pxa/generic.o
arch/arm/mach-pxa/generic.c: In function 'pxa_set_cken':
arch/arm/mach-pxa/generic.c:230: warning: left shift count >= width of type
  CC      arch/arm/mach-pxa/irq.o
  CC      arch/arm/mach-pxa/dma.o
  CC      arch/arm/mach-pxa/time.o
  CC      arch/arm/mach-pxa/pxa3xx.o
  CC      arch/arm/mach-pxa/mfp.o
  CC      arch/arm/mach-pxa/pxa3xx_gpio.o
  CC      arch/arm/mach-pxa/littleton.o
(等等再來處理)

燒入image後,卡在LCD的地方
turn off/on LCD                                                                
Configuring Littleton LCD panel...                                             
qvga_pass_through_mode                                                         
qvga_transfer_config()                                                         
Console: switching to colour frame buffer device 30x20


用今日最強指令:
find . -name "*" | xargs grep "搜尋字串"
在根目錄找"qvga_transfer_config",發現存在於~/300/src/preview-kit/linux/arch/arm/mach-pxa/littleton.c

旁邊有個函式"vga_transfer_config"
看樣子是不用去動這些所謂的board.c檔案了,乾脆直接修改.config檔

#
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
CONFIG_FB_PXA_MINILCD=y
# CONFIG_FB_PXA_LCD_QVGA is not set
CONFIG_FB_PXA_LCD_VGA=y

於是就通過了難關~
Configuring Littleton LCD panel...                                             
vga_transfer_mode()                                                            
SCSI subsystem initialized                                                     
usbcore: registered new interface driver usbfs                               

最後有留下可用的.config和kernel image(1.7MB)放在
/home/jim/used_data/pxa300/091115_finish_in_home

pxa300 檢測 處理MMC問題

環境:Wingows XP sp3
平台測試:Marvell pxa300 (littleton)

1.xp中的超級終端機設定:
使用連線:COM1
每秒傳輸位元:38400
資料位元:8
同位檢查:無
停止位元:1
流量控制:無

設定完畢後,打開px300電源,即可看到開機畫面

2.
錄音功能正常(需外接麥克風)
喇叭正常(沒有外接擴音器)
喇叭正常(有外接擴音器)

3.
usb鍵盤正常,不過有接鍵盤的情況下,觸控螢幕會失去作用(開機時並沒有要求需要點測試點)
一拔掉usb鍵盤後,觸控功能即恢復(須重新開機)

4.
SD卡無效,看不見檔案

5.
usb隨身碟可用,但要有開機磁區才行


Your choice [1,2,3,4,5,6,7,8,9,A,B,C,D,E,S,H,Q] >8
Test USB port .....................

VFS: Can't find an ext2 filesystem on dev sda1.

Test result:
The usb disk test correct, the content of usb:
ls: /mnt/usb/台北大學.ppt: No such file or directory
ls: /mnt/usb/大學會~1.ppt: No such file or directory
ls: /mnt/usb/大學會~1.rar: No such file or directory
ls: /mnt/usb/北大歡姆.doc: No such file or directory
ls: /mnt/usb/守位前輩.doc: No such file or directory
ls: /mnt/usb/網站製~1.3開: No such file or directory
ls: /mnt/usb/網站製~1.htm: No such file or directory
______~1      db-hw-~1.doc  mysql~1.htm   ubuntu~1      作業程序
___roo~1      for091~1      npp55i~1.exe  ubuntu~1.rar  桌面.7z
a12935~1.pdf  init          source        五年一~1.doc
ashmem        linux-~1.gz   trash-~1      卡持緲.doc
Please confirm the result, and hit the keyboard again >read: 328: arg count



嘗試掛載usb,但是失敗囉~

[root@Linux /test]#df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock2           49152     40300      8852  82% /
[root@Linux /test]#cd /dev/mtdblock2
cd: 249: can't cd to /dev/mtdblock2

[root@Linux /test]#mount /dev/mtdblock2 /home/jim
VFS: Can't find an ext2 filesystem on dev mtdblock2.
FAT: bogus number of reserved sectors
VFS: Can't find a valid FAT filesystem on dev mtdblock2.
FAT: bogus number of reserved sectors
VFS: Can't find a valid FAT filesystem on dev mtdblock2.
mount: Mounting /dev/mtdblock2 on /home/jim failed: Invalid argument


6.電量ok

Your choice [1,2,3,4,5,6,7,8,9,A,B,C,D,E,S,H,Q] >b
Test battery.........................

the date read from is 255
the battery is 100 percent
the date read from is 255
the battery is 100 percent
the date read from is 255
the battery is 100 percent
the date read from is 255
the battery is 100 percent

7.解決minicom亂碼問題(家用主機一樣是ttyS0)
env LANG=env_US minicom -s
*A - Serial device : /dev/ttyS0
*E - (串口速度): 115200 bps,
8N1,
No,
No.

8.目標:順利在pxa300中mount MMC卡(32MB)
8.1.
把MMC卡放入pxa300中,不能順利mount
8.2.
於是把MMC卡用ubuntu的gparted格式化,卻沒想到越切越小(31MB到23MB)
8.3.
回到xp底下使用hp格式化工具把MMC卡還原成31MB(正常大小)
8.4.
到ubuntu的gparted工具格式化為ext2格式
8.5.
插入MMC卡的訊息:
[root@Linux /]#Device major:254, first minor:8                                 
 mss/blk1: p1                                                                  
                                                                               
[root@Linux /]#cd /dev/mss/                                                    
[root@Linux mss]#ls                                                            
blk1    blk1p1                                                                 
[root@Linux mss]#mount /dev/mss/blk1p1 /home/jim/mountsd/                      
EXT2-fs warning: checktime reached, running e2fsck is recommended              
[root@Linux mss]#cd /home/jim/mountsd/                                         
[root@Linux mountsd]#ls                                                        
jimkokokokok  lost+found                                                       
[root@Linux mountsd]#vi /etc/fstab
#/dev/root              /                               defaults        0 0
none                    /tmp                    ramfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
none                    /dev/pts                devpts  mode=0622       0 0
sysfs                   /sys                    sysfs   defaults        0 0

/dev/mss/blk0 /home/jim/mountsd msdos defaults 0 0

8.6.fstab似乎不用去動他...總之成功了


http://www.mdn.idv.tw/viewtopic.php?f=11&t=101&start=30&st=0&sk=t&sd=a

2009年11月12日

pxa300原始碼scripts/mod/sumversion.c error: `PATH_MAX' undeclared

在 ~/300/src/preview-kit/linux/打入sudo make zImage後發生error:

HOSTCC  scripts/mod/sumversion.o
scripts/mod/sumversion.c: In function `get_src_version':
scripts/mod/sumversion.c:384: error: `PATH_MAX' undeclared (first use in this function)
scripts/mod/sumversion.c:384: error: (Each undeclared identifier is reported only once
scripts/mod/sumversion.c:384: error: for each function it appears in.)
scripts/mod/sumversion.c:384: warning: unused variable `filelist'
make[2]: *** [scripts/mod/sumversion.o] Error 1
make[1]: *** [scripts/mod] Error 2
make: *** [scripts] Error 2

solution:

 
~/300/src/preview-kit/linux/scripts/mod$ vim sumversion.c
新增 #include 


#include 
#include 
#include "modpost.h"
#include 


Linux開機流程 - 從CONFIG_DEBUG_LL開始談起

利用CONFIG_DEBUG_LL除錯

在網路上查詢CONFIG_DEBUG_LL的結果
http://cateee.net/lkddb/web-lkddb/DEBUG_LL.html
arch/arm/Kconfig

The configuration item CONFIG_DEBUG_LL:

prompt: Kernel low-level debugging functions

type: tristate(三種選擇:yes/no/module)
depends on: CONFIG_DEBUG_KERNEL
(要先選擇此depend後才能有CONFIG_DEBUG_LL選項)


defined in arch/arm/Kconfig
found in Linux Kernels: before 2.6.0 version still available on 2.6.31 release
Help text

Say Y here to include definitions of printascii, printchar, printhex in the kernel. This is helpful if you are debugging code that executes before the console is initialized.

研讀Android 2.6.25原始碼後,亦有DEBUG_LL,存在於Kconfig.debug中
(但是在學長的creator_android_pxa270_defconfig裡面並沒有把此項選擇yes)

release-sourceforge\android-pxa270\kernel\linux-2.6.25-android-1.0_r1\arch\arm\Kconfig.debug
# These options are only for real kernel hackers who want to get their hands dirty.
config DEBUG_LL
 bool "Kernel low-level debugging functions"
 depends on DEBUG_KERNEL

不過在pxa300中的config檔案中就有出現了

所以要解決的事情是:
使pxa300開機時,bootloader和kernel中的machine type號碼要一致

1.到\300\src\preview-kit\linux\arch\arm\tools\mach-types
查看littleton的號碼為:1388,用小算盤換成16進制,0x56C



2.修改\300\src\preview-kit\linux\arch\arm\kernel\head.S中,ENTRY(stext)底下新增一行
LDR     r1,=0x56C


(應該可以吧...還沒測試)

2009年11月10日

pxa300 mkrootfs.sh 閱讀筆記

(300\src\preview-kit\busybox\busybox-1.01\examples\bootfloppy\mkrootfs.sh)


#!/bin/bash
#
# mkrootfs.sh - creates a root file system


此檔為建立file system的腳本

# TODO: need to add checks here to verify that busybox, uClibc and bzImage
# exist


# command-line settable variables
設定busybox和uclibc的目錄夾
BUSYBOX_DIR=..
UCLIBC_DIR=../../uClibc
TARGET_DIR=./loop
FSSIZE=4000
CLEANUP=1
MKFS='mkfs.ext2 -F'

# don't-touch variables
BASE_DIR=`pwd`


while getopts 'b:u:s:t:Cm' opt
do
case $opt in
b) BUSYBOX_DIR=$OPTARG ;;
u) UCLIBC_DIR=$OPTARG ;;
t) TARGET_DIR=$OPTARG ;;
s) FSSIZE=$OPTARG ;;
C) CLEANUP=0 ;;
m) MKFS='mkfs.minix' ;;
*)
echo "usage: `basename $0` [-bu]"
echo " -b DIR path to busybox direcory (default ..)"
echo " -u DIR path to uClibc direcory (default ../../uClibc)"
echo " -t DIR path to target direcory (default ./loop)"
echo " -s SIZE size of root filesystem in Kbytes (default 4000)"
echo " -C don't perform cleanup (umount target dir, gzip rootfs, etc.)"
echo " (this allows you to 'chroot loop/ /bin/sh' to test it)"
echo " -m use minix filesystem (default is ext2)"
exit 1
;;
esac
done




# clean up from any previous work
清除了之前殘留的檔案
mount | grep -q loop
[ $? -eq 0 ] && umount $TARGET_DIR
[ -d $TARGET_DIR ] && rm -rf $TARGET_DIR/
[ -f rootfs ] && rm -f rootfs
[ -f rootfs.gz ] && rm -f rootfs.gz


# prepare root file system and mount as loopback
準備loopback??
dd if=/dev/zero of=rootfs bs=1k count=$FSSIZE
$MKFS -i 2000 rootfs
mkdir $TARGET_DIR
mount -o loop,exec rootfs $TARGET_DIR # must be root


# install uClibc
安裝uClibc和複製一些.so檔
mkdir -p $TARGET_DIR/lib
cd $UCLIBC_DIR
make INSTALL_DIR=
cp -a libc.so* $BASE_DIR/$TARGET_DIR/lib
cp -a uClibc*.so $BASE_DIR/$TARGET_DIR/lib
cp -a ld.so-1/d-link/ld-linux-uclibc.so* $BASE_DIR/$TARGET_DIR/lib
cp -a ld.so-1/libdl/libdl.so* $BASE_DIR/$TARGET_DIR/lib
cp -a crypt/libcrypt.so* $BASE_DIR/$TARGET_DIR/lib
cd $BASE_DIR


# install busybox and components
安裝busybox和元件
cd $BUSYBOX_DIR
make distclean
make CC=$BASE_DIR/$UCLIBC_DIR/extra/gcc-uClibc/i386-uclibc-gcc
make PREFIX=$BASE_DIR/$TARGET_DIR install
cd $BASE_DIR


# make files in /dev
mkdir $TARGET_DIR/dev
./mkdevs.sh $TARGET_DIR/dev


# make files in /etc
cp -a etc $TARGET_DIR
ln -s /proc/mounts $TARGET_DIR/etc/mtab


# other miscellaneous setup
建立initrd和proc目錄
mkdir $TARGET_DIR/initrd
mkdir $TARGET_DIR/proc


# Done. Maybe do cleanup.
if [ $CLEANUP -eq 1 ]
then
umount $TARGET_DIR
rmdir $TARGET_DIR
gzip -9 rootfs
fi


為了瞭解什麼是.so檔(share object)

預備知識:
1.程式Compile流程
http://www.prudentman.idv.tw/2008/05/compile.html

2.Chapter 4. GNU Compiler Collection(此篇很難...看不太懂)
http://www.study-area.org/cyril/opentools/opentools/gcc.html

其中比較明確的解釋為:


1.preprocess 先處理那些#ifdef #define這些東西並做一些巨集代換

2.compile 做語意分析,翻譯成組合語言(assembly language)

3.assemble 翻成機器碼與OS有關的格式,做成relocatable obj檔。

4.link 找到symbol(函式,變數名)與程式庫(shared obj)中的副程式 ,做成可執行obj檔(executable obj)。


shared obj函式庫裡的程式碼為Position Independent Code (PIC), 也就是它的位址可能會隨著不同process而有不同


另外還對gcc參數做了一下功課:
-S
只進行到compiler便停止,因此輸出為一組合語
言檔,在內定的輸出檔名為輸入檔名去除.c或.i
等字尾之後加上.s而成。

-c
只 compile或assemble輸入檔案,而不作連結,
因此輸出為一目的檔(object file), 內定的檔
名為去除.c、.i或是.s等之後加上.o而成。

-o FILE
不管在那一階段結束動作,都可用此參數將內定
的輸出檔名改成"FILE"
;若是沒用此參數,最後
產生的可執行檔檔名內定為 "a.out",在各階段
結束的輸出內定檔名請看上列參數。




NO-CARRIER 網卡無法啟動

 工作時,由於想要啟動linux OS的網卡, 發現某張新設定的網卡一直無法啟動,就算下指令UP了,但是也沒有順利啟動 所以爬文後,想要確認該網卡的status, 發現某行為: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu...