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

2011/04/01

Linux筆記本

XShell的右鍵貼上功能設定
 [Tools]>[Options]->[General頁籤]

1. 在 Delimiters 把 . (英文句點)拿掉,這樣就可以選擇包含副檔名的完整檔案名稱。

2. 選取下面的"Copy selected text to the clipboard automatically"。(按左鍵複製到剪貼簿功能)

3. Middle Button選取"Open the popup menu"。

4. Right Button選取"Paste the clipboard contents."。(按右鍵貼上功能)

安裝python2.6
如果系統已有python,但想要安裝其他版本的python。

wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz

./cofigure

安裝:            ./make altinstall  或  ./make install
指令使用:        python2.6        或     python(已取代系統的python)


允許Fedora讓root來登入GUI的畫面

a.      修改這兩個檔案

/etc/pam.d/gdm

/etc/pam.d/gdm-password

b.      將裡面的這行移掉

auth required pam_succeed_if.so user != root quiet

 螢幕解析度太小(CentOS/Fedora/REHL)

桌面=>管理=>顯示=>硬體=>螢幕類型

桌面=>管理=>顯示=>解析度

如果是在vmware、virtual box 螢幕解析度太小
先安裝vmware tools或addations

Teamviewer 6.0 更改可以使用root執行

vim `which teamviewer `
把exit 1,改成# exit 1

使用者自訂開機啟動程序 (/etc/rc.d/rc.local)
比如想要開機時自動執行teamviewer來做遠端連線,則在/etc/rc.d/rc.local內新增一行
/usr/bin/teamviewer

關閉SELinux
/etc/selinux/config文件中的
SELINUX=disabled

root自動登入X-Window
root無法直接自動登入x-window
1. root 自動登入文字介面
2. 再啟動X-Window

[root@localhost ~]# vi /etc/inittab
#1:2345:respawn:/sbin/mingetty tty1
1:2345:once:/sbin/mingetty –autologin root tty1

[root@localhost ~]# vi /root/.bash_profile
加上 startx

LazyScript

http://ppa.launchpad.net/lazyscripts/stable/ubuntu/pool/main/l/lazyscripts/

 wget through proxy
  1. vim ~/.wgetrc
  2. .wgetrc 內容
    http_proxy = http://proxy.hinet.net:80/
    use_proxy = on
    wait = 15

2009/10/29

在debian新增使用者到sudoers list

在Linux除了 root 之外的其他帳號,若想要使用 sudo 執行屬於 root 的權限指令,則 root 需要先使用 visudo 去修改 /etc/sudoers ,讓該帳號能夠使用全部或部分的 root 指令功能。為什麼要使用 visudo 呢?這是因為 /etc/sudoers 是有設定語法的,如果設定錯誤那會造成無法使用 sudo 指令的不良後果。因此才會使用 visudo 去修改, 並在結束離開修改畫面時,系統會去檢驗 /etc/sudoers 的語法就是了。

1. 開啟Root Terminal,輸入visudo(用來修改sudoers list)
2. 找到下面這行
root ALL=(ALL) ALL
3. 在步驟2那行下方,打上:
your_user_name ALL=(ALL) ALL
4. 按Ctrl + X,和Y鍵儲存離開。
Ref: 鳥哥的 Linux 私房菜:Linux 帳號管理與 ACL 權限設定

2009/08/24

在Ubuntu下更換kernel

1. 更新最新的套件紀錄
apt-get update

2. 找尋最符合你的需要的 kernel image。
apt-cache search linux-image

3. 安裝 kernel
apt-get install linux-image-XXXX

4. reboot

5.將之前的 Kernel 移除掉(在 menu.lst 中的項目也會被一併清除)
apt-get remove linux-image-XXXX

(以上擷取至:http://xml.nchu.edu.tw/blogs/?page_id=20)

如果找不到適合的image,則需要自行編譯。可以參考:
http://nixchun.pixnet.net/blog/post/9690040

2009/04/07

ARM開發環境建立

1.Crosscompiler tool
2.apt-get 以下
libncurses-dev
build-essential
mtd-tools
這樣一來你的開發環境就可以編譯大部分的軟件!!

2009/04/05

fork()與vfork()的比較

節錄自:大黑狗 之 嵌入式系統專案實務 與 產業觀察

fork()和vfork()這兩個系統功能都可以複製出和呼叫者﹙parent﹚完全相同的process﹙child﹚,但呼叫vfork()後的parent process會被暫停,直到被複製出來的child process執行了exec()或exit();而呼叫fork()後的parent process會和新產生的child process平行﹙concurrent﹚執行。

接下來我們必須約略解釋一下fork()在Linux中的實現方式,旨在讓讀者知道為什麼這個系統功能沒法直接移植到沒有MMU的CPU上;首先我們必須先介紹一下”copy-on-write”這個觀念:

一個程式在執行時會佔據記憶體空間,粗略可分為程式段、資料段、堆疊段與常數段,其中程式段與堆疊段是唯讀的,資料段與堆疊段的內容則有可能在執行時期被改變。在Linux中,當某個process呼叫fork()產生child process時,系統只會為新的process配置堆疊段,其他的記憶體區段都是共用的;實際上在child process呼叫exec()去執行另一個程式前,諸如程式段以及常數段這些內容不可以被改變的記憶體區段始終可以共用。可是資料段就不能一直共用,如果parent與child process同時去操作某個變數勢必會引起混亂。

Child process被fork出來後馬上呼叫exec()去執行其他程式是最常用的流程,以此說來,雖然每個process都必須有獨立的資料段,但馬上為child process配置資料段是很不經濟的,因為在大部分的狀況下child process並不會去對資料段作寫入的動作,在執行exec()後,之前的資料段就沒用了。

為了解決這個問題,Linux(fork)採用”copy-on-write”的技術,在child process尚未對資料段作寫入的動作之前,parent與child process共用資料段;當child process對資料段記憶體作出寫入的要求時,系統會配置一塊實體記憶體﹙一個page﹚給child process,並將原本資料段中被要求寫入之page的內容複製到這塊新的page;接著系統會更改child process的page table,使要被寫入資料的虛擬位址可以對應到上述新配置的實體記憶體位址。

此時child process與parent process的資料段大部分都還是功用的,不同的地方只是這次要被寫入的page;這種演算法的好處很多,在最節省記憶體的前提下使得parent與child process不致互相影響。要達到這種效果,CPU沒有支援MMU是做不到的,所以uClinux無法直接支援fork()這個系統功能。

uClinux無法作到安全的資料段分享機制,產生child process後複製整塊資料段也顯得有點笨拙,於是只好讓parent process停止執行,直到child process結束執行或有了自己的資料段之後才能恢復執行,前者表示child process出現例外或呼叫了_exit(),而後者則表示child process呼叫了exec()去執行其他的程式。這樣妥協出來的功能,就是原本Linux中的vfork()系統呼叫。

如果讀者對copy-on-write的原理不清楚也沒關係,讀者在使用uClinux時只需知道一般Linux在實現fork()這個系統功能時必須用到MMU的機制,而uClinux執行在沒有MMU的CPU之上,所以fork()無法直接移植到uClinux上;uClinux提供vfork()以達到多工的效果。

必須注意的是,使用vfork()產生的child process很可能會破壞parent process原本的資料段,所以程式設計師在uClinux上使用vfork()時必須格外小心;而且沒有fork()系統功能的事實使得許多原本運行在Linux上的應用程式無法完全不經修改救執行於uClinux之上。

我的心得:在早期的fork會複製整個parent的address space,造成時間的浪費,使用vfork則不會複製parent的address space。近來的fork則使用copy-on-write的技術,但是這卻需要MMU的幫忙,才能將child process的page table修改成正確的physcial address,而在嵌入式系統上,uClinux並不支援MMU,所以只能使用vfork。


2008/07/07

使用grub解決"多重開機選單遺失"

當Linux與Windows都灌好後,只要Windows一重灌,開機選當就會消失,系統會直接進入Windows,這時候只要放入Linux光碟(這邊以Ubuntu示範),在終端機上打上:

sudo grub; #這邊需要等一些時間
find /boot/grub/stage1 #假設出現 (hd0,2)
root (hd0,2)
setup (hd0)
quit

接著重新開機即可!

2008/05/10

在Linux Ad hoc mode設定aodv-uu

Abstract
這篇文章將介紹你如何在Linux將設定成Ad hoc mode,並且使用AODV routing protocol來當作繞送演算法。

1. Introduction
Ad hoc network是一個無需要AP的網路連線方式。在Ad hoc network裡的電腦彼此都需要幫對方作封包轉送(packet forwarding)的服務。但是由於Ad hoc模式下的電腦可能會移動,所以在建立routing table就成了一個很大的問題,所幸有許多學者提出非常多種的方法來解決此問題,以下將使用aodv-uu實做。

2. System Envirnoment:

OS:ubuntu 7.10

Routing protocol:aodv-uu


3. Setting Ad Hoc mode on Linix

a. 使用iwconfig檢查wireless介面卡的資訊,得知無線網卡名稱是eth1

$ iwconfig

b. 接著到/etc/network/底下,修改interfaces

$ sudo vim /etc/network/interfaces

寫入下列資訊:

iface adHoc inet static

address 10.1.1.1

netmask 255.0.0.0

network 10.1.1.0

broadcast 10.1.1.255

wireless_mode ad-hoc

wireless_essid ownWL

wireless_channel 1

wireless_key restricted s:abcdefghijklm

wireless_power on

up echo "1" > /proc/sys/net/ipv4/ip_forward

up iptables -t nat -A POSTROUTING -s 10.1.1.0/8 -o eth1 –j MASQUERADE

down echo "0" > /proc/sys/net/ipv4/ip_forward

down iptables -t nat -D POSTROUTING -s 10.1.1.0/8 -o eth1 -j MASQUERADE


c. 寫好後存檔離開,然後啟用它

$ sudo ifup eth1=adHoc

d. 檢查是否設定成功(ESSID必須是ownWL)

$ sudo iwconfig

e. 下載aodv-uu,編譯並執行 http://csie-tw.blogspot.com/2008/05/linux-ad-hoc-modeaodv-uu.html

$ make
$ sudo make install
$ sudo ./aodv

3. Conclusion
執行aodv-uu以後,可以使用wireshark來抓取packet,並且觀察packet format。


本文為原創文章,歡迎轉貼,但請附上原文網址:http://csie-tw.blogspot.com/2008/05/linux-ad-hoc-modeaodv-uu.html

Buddhism and Software Developer

In today's fast-paced society, we are often surrounded by work, goals, and external pressures. However, the wisdom found in Buddhism off...