2009年12月23日 星期三

Ubuntu下新酷音輸入符號的方法

新版的 9.04 、9.10 、XP 似乎不用這麼麻煩

只要按下~鍵 (數字1左邊那個) 就可以

但是在Ubuntu8.04下這招確行不通

其實答案很簡單 (點他的說明就有)






說明裡有提到Ctrl+0 (數字零)即可

2009年12月16日 星期三

ARM的Flash啟動流程與機制(s3c2440)

Nand 與 Nor 不同處

Nor支援XIP(eXcute In Place)指令可以在Flash內執行,有點像是Memory的感覺。

Nand沒有Nor的特性,就嵌入式而言如果要執行Nand裡頭的指令必須載入Ram裡頭方可執行,Nand就好比一般個人電腦裡的硬碟。

另外Google到的參考文章解決我的困惑,bootloader有分網路啟動、Flash啟動,其中Flash的啟動中,Nand Flash有著很大的不同處。

NANDFlash需要与一个叫“Steppingstone”的内部SRAM配合工作(在所有的内存映射图上它叫BootSRAM),它是一个处理器内部自带的SRAM缓冲器,它把NANDFlash上4Kbyte启动代码加载,然后执行不信的话请看看英文原解S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash bootloader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstonewill be executed而这4K的SRAM buffer called ‘Steppingstone’会映射到0x00000000,在bootloader把主程序移到SDRAM以后他就可以被用到其他用途。

Steppingstone(SRAM, 並且映射至nGSC0)其實是內部就做好的,在開啟開發版(Reset)後會自動抓取nand前的4KB載入至Steppingstone(映射至nGSC0,0x00000000),CPU從0x00000000執行(其實是Steppingstone的SRAM),前4KB並不是指整個bootloader,而是只應射到steppingstone的內容必須小於4KB,之後,就是執行bootloader裡的內容,像是中斷、設置cpu速度與時鐘頻率、SDRAM初始化、LED初始化、複製bootloader‥等,然後是載入核心、檔案系統。


自启动模式的执行步骤如下:
(1)完成复位
(2)如果自动启动模式使能,NAND Flash存储器的前4KB自动复制到Steppingstone内部缓冲器;
(3)Steppingstone映射到nGCS0;
(4)CPU在Steppingstone的4KB内部缓冲器中开始执行启动代码。
注意:在自动启动模式下,不进行ECC检测。因此,应确保NAND Flash的前4KB不能有位错误(一般NAND Flash厂家都能确保)。


Steppingstone有點像是戰爭裡頭的第一槍,沒了這第一槍戰爭是打不起來的。

參考http://www.arm79.com/simple/?t347.html
      http://blog.sina.com.cn/s/blog_5128d4fc0100923l.html
      http://hi.baidu.com/zengzhaonong/blog/item/4b901ee9b5ef343cb90e2d16.html
      http://www.diybl.com/course/6_system/linux/Linuxjs/2008930/147032.html
      http://blog.ednchina.com/tengjingshu/245192/message.aspx

2009年12月8日 星期二

VirtualBox 分享資料夾使用步驟

(假設在Ubuntu裡頭透過Virtual Box跑一個XP)


1.先新增一個資料夾,並記住它的位置(Ubuntu裡頭)


2.在Virtual Box視窗裡點選你所要的作業系統(假設是XP)


3.按下設定值,然後點選分享資料夾並新增你要分享資料夾的路徑(1.裡所新增的路徑)


4.接著按啟動(接下來都在XP裡頭作業)


5.到了XP裡頭 開啟我的電腦


6.點選工具裡頭的連線網路磁碟機


7.選你喜歡的磁碟機代號,然後按瀏覽


8.會看到VirtualBox Shared Folders點進去就可以看到你在Ubuntu裡分享的資料夾


9.之後按確定與完成,就可以在我的電腦裡頭看見網路磁碟機,以後就可以透過這個資料夾在兩個系統間傳輸檔案

2009年11月30日 星期一

Bootloader的啟動方式


Bootloader的啟動


Linux系統是通過Bootloader引導啟動的。一上電,就要執行Bootloader來初始化系統。
系統加電或復位後(Reset),所有CPU都會從某個地址開始執行,這是由處理器設計決定的。比如,X86的復位向量在高地址端,ARM處理器在復位時從地址 0x00000000取第一條指令。嵌入式系統的開發板都要把板上ROMFlash映射到這個地址。因此,必須把Bootloader程序存儲在相應的 Flash位置。系統加電後,CPU將從這裡開始執行。


主機和目標機之間一般有串口(RS232或是RJ-45)可以連接,Bootloader軟件通常會通過串口來輸入輸出。例如:輸出出錯或者執行結果信息到串口終端,從串口終端讀取用戶控制命令等。


Bootloader啟動過程通常是多階段的(Vivi分成兩階段head.S(組合語言寫成)init/main.c(C語言寫成)),這樣既能提供復雜的功能,又有很好的可移植性。例如:從Flash啟動的Bootloader多數是兩階段的啟動過程。


大多數Bootloader都包含2種不同的操作模式:本地加載模式和遠程下載模式。這2種操作模式的區別僅對於開發人員才有意義,也就是不同啟動方式的使用。從最終用戶的角度看,Bootloader的作用就是用來加載操作系統,而並不存在所謂的本地加載模式與遠程下載模式的區別。
因為Bootloader的主要功能是引導操作系統啟動,所以我們詳細討論一下各種啟動方式的特點。


1.網路啟動方式
這種方式開發板不需要配置較大的存儲介質,跟無硬碟的工作站有點類似。但是使用這種啟動方式之前,需要把Bootloader安裝到板上的EPROM或者 Flash中。Bootloader通過以太網接口遠程下載Linux內核映像或者文件系統。
使用這種方式也有前提條件,就是目標板有串口、以太網接口或者其他連接方式。串口一般可以作為控制台,同時可以用來下載內核影像和RAMDISK文件系統。串口通信(RS232)傳輸速率過低,不適合用來掛接NFS文件系統。所以以太網接口成為通用的互連設備,一般的開發板都 可以配置10M乙太網接口(RJ-45)
對於PDA等手持設備來說,以太網的RJ-45接口顯得大了些,而USB接口,特別是USB的迷你接口,尺寸非常小。對於開發的嵌入式系統,可以把USB接口虛擬成以太網接口來通訊。這種方式在開發主機和開發板兩端都需要驅動程序。
另外,還要在服務器上配置啟動相關網路服務。Bootloader下載文件一般都使用TFTP網路協議,還可以通過DHCP的方式動態配置IP地址。


2.硬碟啟動方式
傳統的Linux系統運行在桌機或者伺服器上,這些電腦一般都使用BIOS引導,並且使用硬碟作為存儲介質。如果進入BIOS設置菜單,可以探測處理器、內存、硬碟等設備,可以設置BIOS從軟碟片、光碟機或者某顆硬碟啟動。也就是說,BIOS並不直接引導操作系統。那麼在硬碟的主引導區,還需要一個 Bootloader。這個Bootloader可以從硬碟文件系統中把操作系統引導起來。
Linux傳統上是通過LILOLInux LOader)引導的,後來又出現了GNU的軟件GRUBGRand Unified Bootloader)。這2Bootloader廣泛應用在X86Linux系統上。你的開發主機可能就使用了其中一種,熟悉它們有助於配置多種系統引導功能。


LILO軟件工程是由Werner Almesberger創建,專門為引導Linux開發的。現在LILO的維護者是John Coffman,最新版本下載站點:http://lilo.go.dyndns.orgLILO有詳細的文檔,例如LILO套件中附帶使用手冊和參考手冊。此外,還可以在LDP的“LILO mini-HOWTO”中找到LILO的使用指南。
GRUB GNU計劃的主要bootloaderGRUB最初是由Erich BoleynGNU Mach操作系統撰寫的引導程序。後來有Gordon MatzigkeitOkuji Yoshinori接替Erich的工作,繼續維護和開發GRUBGRUB的網站http://www.gnu.org/software/grub/上有對套件使用的說明文件,叫作《GRUB manual》。GRUB能夠使用TFTPBOOTP或者DHCP通過網路啟動,這種功能對於系統開發過程很有用。
除了傳統的Linux系統上的引導程序以外,還有其他一些引導程序,也可以支持硬碟引導啟動。例如:LoadLin可以從DOS下啟動Linux;還有ROLOLinuxBIOSU-Boot也支持這種功能。


3Flash啟動方式
大多數嵌入式系統上都使用Flash存儲介質。Flash有很多類型,包括NOR FlashNAND Flash和其他半導體盤。其中,NOR Flash使用最為普遍。
NOR Flash可以支持隨機訪問,所以程式是可以直接在Flash上執行的。Bootloader一般是存儲在Flash芯片上的。
Bootloader一般放在Flash的底端或者頂端,這要根據處理器的復位向量(Reset)設置。要使Bootloader的入口位於處理器上電執行第一條指令的位置。
接下來分配參數區,這裡可以作為Bootloader的參數保存區域。
再下來內核映像區。Bootloader引導Linux內核,就是要從這個地方把內核映像解壓到RAM中去,然後跳轉到內核映像入口執行。
然後是文件系統區。如果使用Ramdisk文件系統,則需要Bootloader把它解壓到RAM中。
最後還可以分出一些數據區,這要根據實際需要和Flash大小來考慮了。
這些分區是開發者定義的,Bootloader一般直接讀寫對應的偏移地址。到了Linux內核空間,可以配置成MTD設備來訪問Flash分區。
除了NOR Flash,還有NAND FlashCompact FlashDiskOnChip等。這些Flash具有芯片價格低,存儲容量大的特點。但是這些芯片一般通過專用控制器的I/O方式來訪問,不能隨機訪問,因此引導方式跟NOR Flash也不同。在這些芯片上,需要配置專用的引導程序。通常,這種引導程序起始的一段程式就把整個引導程序複製到RAM中運行,從而實現自行啟動,這跟從硬碟上啟動相似。

2009年11月22日 星期日

如何讓Ubuntu下可以解壓縮RAR檔?

下載rarlinux-3.9.0.tar.gz (版本可能不同)

開啟終端機然後到該資料夾的目錄輸入
tar zxvf rarlinux-3.9.0.tar.gz

會出現下列訊息
rar/
rar/readme.txt
rar/default.sfx
rar/whatsnew.txt
rar/license.txt
rar/order.htm
rar/rar
rar/unrar
rar/rar_static
rar/technote.txt
rar/rarfiles.lst
rar/makefile
rar/rar.txt

然後在輸入
cd rar => 進入rar資料夾

接著在輸入
make

2009年11月21日 星期六

如何在Ubuntu下安裝FTP(以Vsftpd為例)

1.首先先在終端機下輸入

sudo apt-get install vsftpd => 安裝Vsftpd套件

2.接著開啟

sudo gedit /etc/vsftpd.conf => 設定相關參數(可自行Google各參數定義)

****************以下是指令(你也可以複製貼上然後存檔)********************

# Example config file /etc/vsftpd.conf


#


# The default compiled in settings are fairly paranoid. This sample file


# loosens things up a bit, to make the ftp daemon more usable.


# Please see vsftpd.conf.5 for all compiled in defaults.


#


# READ THIS: This example file is NOT an exhaustive list of vsftpd options.


# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's


# capabilities.


#


#


# Run standalone? vsftpd can run either from an inetd or as a standalone


# daemon started from an initscript.


listen=YES


#


# Run standalone with IPv6?


# Like the listen parameter, except vsftpd will listen on an IPv6 socket


# instead of an IPv4 one. This parameter and the listen parameter are mutually


# exclusive.


#listen_ipv6=YES


#


# Allow anonymous FTP? (Beware - allowed by default if you comment this out).


anonymous_enable=NO


#


# Uncomment this to allow local users to log in.


local_enable=YES


#


# Uncomment this to enable any form of FTP write command.


write_enable=YES


#


# Default umask for local users is 077. You may wish to change this to 022,


# if your users expect that (022 is used by most other ftpd's)


local_umask=022


#


# Uncomment this to allow the anonymous FTP user to upload files. This only


# has an effect if the above global write enable is activated. Also, you will


# obviously need to create a directory writable by the FTP user.


#anon_upload_enable=YES


#


# Uncomment this if you want the anonymous FTP user to be able to create


# new directories.


#anon_mkdir_write_enable=YES


#


# Activate directory messages - messages given to remote users when they


# go into a certain directory.


dirmessage_enable=YES


#


# Activate logging of uploads/downloads.


xferlog_enable=YES


#


# Make sure PORT transfer connections originate from port 20 (ftp-data).


connect_from_port_20=YES


#


# If you want, you can arrange for uploaded anonymous files to be owned by


# a different user. Note! Using "root" for uploaded files is not


# recommended!


#chown_uploads=YES


#chown_username=whoever


#


# You may override where the log file goes if you like. The default is shown


# below.


xferlog_file=/var/log/vsftpd.log


#


# If you want, you can have your log file in standard ftpd xferlog format


xferlog_std_format=YES


#


# You may change the default value for timing out an idle session.


idle_session_timeout=600


#


# You may change the default value for timing out a data connection.


#data_connection_timeout=120


#


# It is recommended that you define on your system a unique user which the


# ftp server can use as a totally isolated and unprivileged user.


#nopriv_user=ftpsecure


#


# Enable this and the server will recognise asynchronous ABOR requests. Not


# recommended for security (the code is non-trivial). Not enabling it,


# however, may confuse older FTP clients.


#async_abor_enable=YES


#


# By default the server will pretend to allow ASCII mode but in fact ignore


# the request. Turn on the below options to have the server actually do ASCII


# mangling on files when in ASCII mode.


# Beware that on some FTP servers, ASCII support allows a denial of service


# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd


# predicted this attack and has always been safe, reporting the size of the


# raw file.


# ASCII mangling is a horrible feature of the protocol.


#ascii_upload_enable=YES


#ascii_download_enable=YES


#


# You may fully customise the login banner string:


#ftpd_banner=Welcome to OIpingo FTP service.


#


# You may specify a file of disallowed anonymous e-mail addresses. Apparently


# useful for combatting certain DoS attacks.


#deny_email_enable=YES


# (default follows)


#banned_email_file=/etc/vsftpd.banned_emails


#


# You may restrict local users to their home directories. See the FAQ for


# the possible risks in this before using chroot_local_user or


# chroot_list_enable below.


#chroot_local_user=YES


#


# You may specify an explicit list of local users to chroot() to their home


# directory. If chroot_local_user is YES, then this list becomes a list of


# users to NOT chroot().


chroot_list_enable=YES


# (default follows)


chroot_list_file=/etc/vsftpd.chroot_list


#


# You may activate the "-R" option to the builtin ls. This is disabled by


# default to avoid remote users being able to cause excessive I/O on large


# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume


# the presence of the "-R" option, so there is a strong case for enabling it.


#ls_recurse_enable=YES


#


#


# Debian customization


#


# Some of vsftpd's settings don't fit the Debian filesystem layout by


# default. These settings are more Debian-friendly.


#


# This option should be the name of a directory which is empty. Also, the


# directory should not be writable by the ftp user. This directory is used


# as a secure chroot() jail at times vsftpd does not require filesystem


# access.


secure_chroot_dir=/var/run/vsftpd


#


# This string is the name of the PAM service vsftpd will use.


pam_service_name=vsftpd


#


# This option specifies the location of the RSA certificate to use for SSL


# encrypted connections.


rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem


# This option specifies the location of the RSA key to use for SSL


# encrypted connections.


rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key


#可以接受的最大clinet可連線的數目


max_clients=20


#每個ip的最大連線數目


max_per_ip=15

*************以上是程式碼(去掉前面的井號該參數就會enable)****************



3.如果要新增另一個使用者步驟如下:
在終端機下輸入(先切換成Root權限 => sudo su)
adduser 您要的帳號
接著會要你輸入兩次密碼
然後開啟ftp軟體 輸入IP 帳號 密碼 就可以進入了
(如果你只有一個人使用,輸入IP然後帳號密碼用你登入Ubuntu的帳號與密碼就可以了 )

或者是在終端機下輸入
ftp 你的IP
(如果你的IP非固定IP請參考這篇NO-IP)


4.更改步驟後都要在終端機執行


sudo /etc/init.d/vsftpd stop 關閉 FTP服務
sudo /etc/init.d/vsftpd start 開啟 FTP服務
或者是你也可以用
sudo /etc/init.d/vsftpd restart 重開FTP服務

5.限制使用者

當在/etc/vsftpd.conf裡的chroot_local_user=YES(代表所有人都不可以跳出家目錄)
這時如果在sudo gedit /etc/vsftpd.chroot_list有該使用者的名稱則該使用者可以跳出

反之當chroot_local_user=NO(代表所有人都可以跳出家目錄)
這時如果在sudo gedit /etc/vsftpd.chroot_list有該使用者的名稱則該使用者無法跳出

6.讓你的FTP在登入時出現歡迎訊息方法如下:

開啟筆記本將你想要的歡迎訊息輸入,並將檔案儲存為『.message』並存放於跟目錄下『/home/你的帳號』

2009年11月20日 星期五

想開保時捷又沒錢買嗎?







 Link
想開保時捷又沒錢買嗎?
這裡有不錯的方案
xbox的方向盤
希望他可以出法拉利或是賓士、藍寶堅尼
個人是比較想開法拉利的

2009年11月13日 星期五

Ubuntu能夠執行.rpm檔的方法

如果在 Ubuntu 想要安裝的軟件只提供 RPM 檔案,而沒有提供 debian 的 .deb 檔案,可以使用 Alien Package 來解決。

執行下列指令安裝alien
sudo apt-get install alien

將.rpm轉.deb
sudo alien -k 檔名.rpm  這個步驟就需要一點時間了

完成後直接點就可以安裝了

Nero的Linux版

網址連結
http://www.nero.com/eng/downloads-linux4-trial.php

點選你要的版本安裝後就可以使用了

電路板的Nike球鞋






engadget看到的這雙Nike  這樣穿起來舒服嗎?

2009年11月12日 星期四

全世界最小的直昇機

全世界最小的直昇機Gen H-4 看了很久還是很有意思



該公司網站 http://www.gen-corp.jp/

販売価格 日幣 ¥6,000,000円(税別)能夠飛上天,這價錢算便宜吧!


另外一台 Mosquito XE

Mosquito XE : $30,000 (美金)including engine/instruments

Vivi Stage2

vivi的第二阶段

vivi的第二阶段是从main()函数开始,同一般的C语言程序一样,该函数在/init/main.c文件中,总共可以分为8个步骤。
(1) 函数开始,通过putstr(vivi_banner)打印出vivi的版本。Vivi_banner在/init/version.c文件中定义
(2) 对开发板进行初始化(board_init函数),board_init是与开发板紧密相关的,这个函数在/arch/s3c2410/smdk.c文件中。开发板初始化主要完成两个功能,时钟初始化(init_time())和通用IO口设置(set_gpios())。
void set_gpios(void)
{
GPACON = vGPACON;
GPBCON = vGPBCON;
GPBUP = vGPBUP;
GPCCON = vGPCCON;
GPCUP = vGPCUP;
GPDCON = vGPDCON;
GPDUP = vGPDUP;
GPECON = vGPECON;
GPEUP = vGPEUP;
GPFCON = vGPFCON;
GPFUP = vGPFUP;
GPGCON = vGPGCON;
GPGUP = vGPGUP;
GPHCON = vGPHCON;
GPHUP = vGPHUP;
EXTINT0 = vEXTINT0;
EXTINT1 = vEXTINT1;
EXTINT2 = vEXTINT2;
}
其中,GPIO口在smdk2410.h(\vivi\include\platform\目录下)文件中定义。
(3) 内存映射初始化和内存管理单元的初始化工作:
mem_map_init();
mmu_init();

这两个函数都在/arch/s3c2410/mmu.c文件中。
void mem_map_init(void)
{
#ifdef CONFIG_S3C2410_NAND_BOOT
mem_map_nand_boot();
#else
mem_map_nor();
#endif
cache_clean_invalidate();
tlb_invalidate();
}
如果配置vivi时使用了NAND作为启动设备,则执行mem_map_nand_boot(),否则执行mem_map_nor()。这里要注意的是,如果使用NOR启动,则必须先把vivi代码复制到RAM中。这个过程是由copy_vivi_to_ram()函数来完成的。代码如下:
static void copy_vivi_to_ram(void)
{ putstr_hex("Evacuating 1MB of Flash to DRAM at 0x", VIVI_RAM_BASE);
memcpy((void *)VIVI_RAM_BASE, (void *)VIVI_ROM_BASE, VIVI_RAM_SIZE);
}
VIVI_RAM_BASE、VIVI_ROM_BASE、VIVI_RAM_SIZE这些值都可以在smdk2410.h中查到,并且这些值必须根据自己开发板的RAM实际大小修改。这也是在移植vivi的过程中需要注意的一个地方。
mmu_init()函数中执行了arm920_setup函数。这段代码是用汇编语言实现的,针对arm920t核的处理器。
(4) 初始化堆栈,heap_init()。(定义在\vivi\lib\heap.c文件中)
int heap_init(void)
{
return mmalloc_init((unsigned char *)(HEAP_BASE), HEAP_SIZE);
}
(5) 初始化mtd设备,mtd_dev_init()。
int mtd_init(void)
{ int ret;
#ifdef CONFIG_MTD_CFI
ret = cfi_init();
#endif
#ifdef CONFIG_MTD_SMC
ret = smc_init();
#endif
#ifdef CONFIG_S3C2410_AMD_BOOT
ret = amd_init();
#endif
if (ret) {
mymtd = NULL;
return ret;
}
return 0;
}
这几个函数可以在/drivers/mtd/maps/s3c2410_flash.c里找到。
(6) 初始化私有数据,init_priv_data()。(定义在\vivi\lib\priv_data\rw.c文件中)
(7) 初始化内置命令,init_builtin_cmds()。
通过add_command函数,加载vivi内置的几个命令。
(8) 启动boot_or_vivi()。
启动成功后,将通过vivi_shell()启动一个shell(如果配置了CONFIG_SERIAL_TERM),此时vivi的任务完成。

Vivi Stage1

vivi的第一阶段
完成含依赖于CPU的体系结构硬件初始化的代码,包括禁止中断、初始化串口、复制自身到RAM等。相关代码集中在head.S(\vivi\arch\s3c2410目录下):
Head.S:
#include "config.h"
#include "linkage.h"
#include "machine.h"
@ Start of executable code
ENTRY(_start)
ENTRY(ResetEntryPoint)
@
@ Exception vector table (physical address = 0x00000000) ;异常向量表物理地址
@
@0x00: Reset ;复位
b Reset
@ 0x04: Undefined instruction exception ;未定义的指令异常
UndefEntryPoint:
b HandleUndef
@0x08: Software interrupt exception ;软件中断异常
SWIEntryPoint: b HandleSWI
@ 0x0c: Prefetch Abort (Instruction Fetch Memory Abort) ;内存操作异常
PrefetchAbortEnteryPoint: b HandlePrefetchAbort
@ 0x10: Data Access Memory Abort ;数据异常
DataAbortEntryPoint: b HandleDataAbort
@0x14: Not used ;未使用
NotUsedEntryPoint: b HandleNotUsed
@ 0x18: IRQ(Interrupt Request) exception ;慢速中断处理
IRQEntryPoint: b HandleIRQ
@ 0x1c: FIQ(Fast Interrupt Request) exception ;快速中断处理
FIQEntryPoint: b HandleFIQ
@
@ VIVI magics
@
@ 0x20: magic number so we can verify that we only put
.long 0
@ 0x24:
.long 0
@ 0x28: where this vivi was linked, so we can put it in memory in the right place
.long _start
@ 0x2C: this contains the platform, cpu and machine id
.long ARCHITECTURE_MAGIC
@ 0x30: vivi capabilities
.long 0
#ifdef CONFIG_PM ;vivi考虑不需要使用电源管理
@ 0x34:
b SleepRamProc
#endif
#ifdef CONFIG_TEST
@ 0x38:
b hmi
#endif
@
@ Start VIVI head
@
Reset:
@ disable watch dog timer ;禁止看门狗计时器
mov r1, #0x53000000 ;WTCON寄存器地址是0x53000000,清0
mov r2, #0x0
str r2, [r1]
#ifdef CONFIG_S3C2410_MPORT3 ;不符合条件,跳到下面的关中断
/**** 在/vivi/include/autoconf.h中#undef CONFIG_S3C2410_MPORT3******/
mov r1, #0x56000000 ;GPACON寄存器地址是0x56000000
mov r2, #0x00000005 str r2, [r1, #0x70] ;配置GPHCON寄存器
mov r2, #0x00000001 str r2, [r1, #0x78] ;配置GPHUP寄存器
mov r2, #0x00000001 str r2, [r1, #0x74] ;配置GPHDAT寄存器
#endif
@ disable all interrupts ;禁止全部中断
mov r1, #INT_CTL_BASE
mov r2, #0xffffffff str r2, [r1, #oINTMSK] ;掩码关闭所有中断
ldr r2, =0x7ff
str r2, [r1, #oINTSUBMSK]
@ initialise system clocks ;初始化系统时钟
mvn r2, #0xff000000
str r2, [r1, #oLOCKTIME]
@ldr r2, mpll_50mhz
@str r2, [r1, #oMPLLCON]
#ifndef CONFIG_S3C2410_MPORT1 ;满足条件,向下执行
/**** 在/vivi/include/autoconf.h中#undef CONFIG_S3C2410_MPORT1******/
@ 1:2:4
mov r1, #CLK_CTL_BASE
mov r2, #0x3
str r2, [r1, #oCLKDIVN]
mrc p15, 0, r1, c1, c0, 0 @ read ctrl register
orr r1, r1, #0xc0000000 @ Asynchronous
mcr p15, 0, r1, c1, c0, 0 @ write ctrl register
@ now, CPU clock is 200 Mhz ;CPU的频率是200MHz
mov r1, #CLK_CTL_BASE
ldr r2, mpll_200mhz
str r2, [r1, #oMPLLCON]
#else
@ 1:2:2
mov r1, #CLK_CTL_BASE
ldr r2, clock_clkdivn
str r2, [r1, #oCLKDIVN]
orr r1, r1, #0xc0000000 @ Asynchronous
mcr p15, 0, r1, c1, c0, 0 @ write ctrl register
@ now, CPU clock is 100 Mhz ;CPU的频率是100MHz
mov r1, #CLK_CTL_BASE
ldr r2, mpll_100mhz
str r2, [r1, #oMPLLCON]
#endif
bl memsetup ;跳转到memsetup函数
/*****************************
Memsetup函数的实现:
ENTRY(memsetup)
@ initialise the static memory
@ set memory control registers ;设置内存控制寄存器的初值
mov r1, #MEM_CTL_BASE
adrl r2, mem_cfg_val
/*******************
@
@ Data Area
@
@ Memory configuration values
.align 4
mem_cfg_val: ;定义好的13*4=52个字节初值
.long vBWSCON ;在/vivi/include/platform/smdk2410.h中赋值
/****** SDRAM从32位变成16位,需要修改vBWSCON的值 ******/
.long vBANKCON0
.long vBANKCON1
.long vBANKCON2
.long vBANKCON3
/********** 网卡控制器vBANKCON3的值可能需要修改 **************/
.long vBANKCON4
.long vBANKCON5
.long vBANKCON6
/****** SDRAM从32位变成16位,可能需要修改vBANKCON6的值 ******/
.long vBANKCON7
.long vREFRESH
.long vBANKSIZE
/****** SDRAM从64MB变成32MB,需要修改vBANKSIZE的值 ******/
.long vMRSRB6
.long vMRSRB7
********************/
add r3, r1, #52
1: ldr r4, [r2], #4
str r4, [r1], #4
cmp r1, r3
bne 1b ;循环操作,直到13个寄存器赋值完成
mov pc, lr
*******************************/
#ifdef CONFIG_PM ;vivi考虑不需要使用电源管理
@ Check if this is a wake-up from sleep
ldr r1, PMST_ADDR
ldr r0, [r1]
tst r0, #(PMST_SMR)
bne WakeupStart ;查看状态,判断是否需要跳转到WakeupStart
#endif
#ifdef CONFIG_S3C2410_SMDK ;SMDK开发板使用
@ All LED on ;点亮开发板上的LED
mov r1, #GPIO_CTL_BASE
add r1, r1, #oGPIO_F ;LED使用GPIOF组的管脚
ldr r2,=0x55aa ;使能EINT0,EINT1,EINT2,EINT3,
;另四个管脚配置成输出,屏蔽EINT4,5,6,7
str r2, [r1, #oGPIO_CON]
mov r2, #0xff
str r2, [r1, #oGPIO_UP] ;disable the pull-up function
mov r2, #0x00
str r2, [r1, #oGPIO_DAT]
#endif
#if 0
@ SVC
mrs r0, cpsr
bic r0, r0, #0xdf
orr r1, r0, #0xd3
msr cpsr_all, r1
#endif
@ set GPIO for UART ;设置串口
mov r1, #GPIO_CTL_BASE
add r1, r1, #oGPIO_H ;设置GPIO_H组管脚为串口
ldr r2, gpio_con_uart
str r2, [r1, #oGPIO_CON]
ldr r2, gpio_up_uart
str r2, [r1, #oGPIO_UP]
/*************************
@ inital values for GPIO
gpio_con_uart:
.long vGPHCON ;vGPHCON在/vivi/include/platform/smdk2410.h中赋值
;#define vGPHCON 0x0016faaa
;GPIO_H配置为nCTS0,nRTS0, RXD0,TXD0, RXD1,
;TXD1,nCTS1,nRTS1,
/**** 三个串口都使能,可能需要修改#define vGPHCON 0x0016aaaa ****/
gpio_up_uart:
.long Vgphup ;同上#define vGPHUP 0x000007ff
;The pull-up function is disabled.
************************/
bl InitUART ;跳转到InitUART串口初始化函数
/****************************************************
@ Initialize UART
@
@ r0 = number of UART port
InitUART:
ldr r1, SerBase
/*******************
.align 4 ;缺省情况下在vivi中只初始化了UART0
SerBase:
#if defined(CONFIG_SERIAL_UART0)
.long UART0_CTL_BASE ;基地址在/vivi/include/s3c2410.h中定义
#elif defined(CONFIG_SERIAL_UART1)
.long UART1_CTL_BASE
#elif defined(CONFIG_SERIAL_UART2)
.long UART2_CTL_BASE
#else
#error not defined base address of serial
#endif
********************/
mov r2, #0x0
str r2, [r1, #oUFCON]
str r2, [r1, #oUMCON]
mov r2, #0x3
str r2, [r1, #oULCON]
ldr r2, =0x245
str r2, [r1, #oUCON]
#define UART_BRD ((50000000 / (UART_BAUD_RATE * 16)) - 1)
mov r2, #UART_BRD
str r2, [r1, #oUBRDIV]
mov r3, #100
mov r2, #0x0
1: sub r3, r3, #0x1
tst r2, r3
bne 1b
#if 0
mov r2, #'U'
str r2, [r1, #oUTXHL]
1: ldr r3, [r1, #oUTRSTAT]
and r3, r3, #UTRSTAT_TX_EMPTY
tst r3, #UTRSTAT_TX_EMPTY
bne 1b
mov r2, #'0'
str r2, [r1, #oUTXHL]
1: ldr r3, [r1, #oUTRSTAT]
and r3, r3, #UTRSTAT_TX_EMPTY
tst r3, #UTRSTAT_TX_EMPTY
bne 1b
#endif
mov pc, lr
****************************************************/
#ifdef CONFIG_DEBUG_LL ;打印调试信息,缺省未定义
@ Print current Program Counter
ldr r1, SerBase
mov r0, #'\r'
bl PrintChar
mov r0, #'\n'
bl PrintChar
mov r0, #'@'
bl PrintChar
mov r0, pc
bl PrintHexWord
#endif
#ifdef CONFIG_BOOTUP_MEMTEST
@ simple memory test to find some DRAM flaults.
bl memtest
#endif
#ifdef CONFIG_S3C2410_NAND_BOOT ;从NAND Flash启动
bl copy_myself ;跳转到copy_myself函数
/**********************************************
@
@ copy_myself: copy vivi to ram
@
copy_myself:
mov r10, lr
@ reset NAND
mov r1, #NAND_CTL_BASE
ldr r2, =0xf830 @ initial value
str r2, [r1, #oNFCONF]
ldr r2, [r1, #oNFCONF]
bic r2, r2, #0x800 @ enable chip
str r2, [r1, #oNFCONF]
mov r2, #0xff @ RESET command
strb r2, [r1, #oNFCMD]
mov r3, #0 @ wait
1: add r3, r3, #0x1
cmp r3, #0xa
blt 1b
2: ldr r2, [r1, #oNFSTAT] @ wait ready
tst r2, #0x1
beq 2b
ldr r2, [r1, #oNFCONF]
orr r2, r2, #0x800 @ disable chip
str r2, [r1, #oNFCONF]
@ get read to call C functions (for nand_read())
ldr sp, DW_STACK_START @ setup stack pointer
mov fp, #0 @ no previous frame, so fp=0
@ copy vivi to RAM
ldr r0, =VIVI_RAM_BASE
/*********在/vivi/linux/platform/smdk2410.h中定义
#define VIVI_RAM_BASE (DRAM_BASE + DRAM_SIZE - VIVI_RAM_SIZE)
***************************************/
mov r1, #0x0
mov r2, #0x20000 ;0x20000-〉128k字节
bl nand_read_ll ;nand_read_ll在/vivi/arch/s3c2410/nand_read.c中定义
;r0,r1,r2分别为函数的三个参数
;从NANDFlash的0地址拷贝128k到SDRAM指定处
tst r0, #0x0
beq ok_nand_read
#ifdef CONFIG_DEBUG_LL
bad_nand_read:
ldr r0, STR_FAIL
ldr r1, SerBase
bl PrintWord
1: b 1b @ infinite loop
#endif
ok_nand_read:
#ifdef CONFIG_DEBUG_LL
ldr r0, STR_OK
ldr r1, SerBase
bl PrintWord
#endif
@ verify
mov r0, #0
ldr r1, =0x33f00000
mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes
go_next:
ldr r3, [r0], #4
ldr r4, [r1], #4
teq r3, r4
bne notmatch
subs r2, r2, #4
beq done_nand_read
bne go_next
notmatch:
#ifdef CONFIG_DEBUG_LL
sub r0, r0, #4
ldr r1, SerBase
bl PrintHexWord
ldr r0, STR_FAIL
ldr r1, SerBase
bl PrintWord
#endif
1: b 1b
done_nand_read:
#ifdef CONFIG_DEBUG_LL
ldr r0, STR_OK
ldr r1, SerBase
bl PrintWord
#endif
mov pc, r10 ;vivi拷贝到SDRAM完成,函数返回
*********************************/
@ jump to ram
ldr r1, =on_the_ram
add pc, r1, #0
nop
nop
1: b 1b @ infinite loop
on_the_ram:
#endif
#ifdef CONFIG_DEBUG_LL
ldr r1, SerBase
ldr r0, STR_STACK
bl PrintWord
ldr r0, DW_STACK_START
bl PrintHexWord
#endif
@ get read to call C functions
ldr sp, DW_STACK_START @ setup stack pointer
mov fp, #0 @ no previous frame, so fp=0
mov a2, #0 @ set argv to NULL
bl main @ call main
mov pc, #FLASH_BASE @ otherwise, reboot
@
@ End VIVI head
@

2009年11月11日 星期三

Ubuntu下安裝Flash Player(32bit)

安裝Flash Player(建議到官方網站下載Linux下可執行的deb檔比較快)
sudo apt-get install flashplugin-installer

亂碼問題
sudo mv /etc/fonts/conf.avail/49-sansserif.conf /etc/fonts/conf.avail/49-sansserif.conf.bak

Ubuntu上方面板圖示不小心刪了處理方法

話說有天更新完Ubuntu的套件後右上方的圖示亂了

想說調整看看,沒想到我手賤把Ubuntu的無線訊號給砍了

最後只剩下帳號的圖示

筆記型電腦沒有那個圖示 要怎麼上網?連訊號都不知道要收尋哪個

還好搜尋了半天總算找到解決辦法(原來也有人跟我一樣手賤)

以下是解決辦法

Ubuntu的默认面板菜单栏删除后恢复的方法

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2008/09/21/gnome-panel.html
我在一次不小心给Ubuntu的面板菜单栏删除了,害我很多事情不能做,因为没有面板。研究了一下怎么恢复的方法。
其实很容易,在个人的主目录。然后
rm -rf  .gconf
这样就行了,在重新进入,是不是面板都恢复成默认的啦。
如果还不行,那就
rm -rf .gconfd 这个也删除啦
另外,如果只是面板上面应用程序的面板菜单没有了
给.config/menus/application.menu 删除后重新登录好了

2009年11月10日 星期二

如何在Ubuntu下增加字型

將新的字型 copy 到/usr/share/fonts/truetype

終端機下
=> sudo cp 字型的位址 /usr/share/fonts/truetype

或是直接複製字型到/usr/share/fonts/truetype

第一篇文章

這個Blog主要是紀錄日常、研究生活的點點滴滴

主要為LinuxEmbedded System上的心得與筆記

並提供給有需要的人 在遍尋不著時的良藥