數位天堂

Nokia:科技始終來自於人性; 拜耳:如果文明不能使我們更相愛,那科技便失去意義!
歡迎您的加入,讓我們一起討論科技與環保的整合應用...

您尚未登入。

#1 2008-10-20 12:26:23

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

開機時啟動程式 /etc/init.d/rcS 發生Read Only

哈囉。
我用的是ASUS WL-500gP的平台,「DD-WRT v23 SP2 std (c) 2006 NewMedia-NET GmbH」
system type             : Broadcom BCM4704 chip rev 9
processor               : 0
cpu model               : BCM3302 V0.6
BogoMIPS                : 263.78
wait instruction        : no
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : no
hardware watchpoint     : no
VCED exceptions         : not available
VCEI exceptions         : not available

每次要登入到平台中(telnet 192.168.1.1),都要先設定以下的環境才有辦法執行自己所寫的程式:
mount -o bind /jffs/opt /opt
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/jffs/opt/bin
export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib

現在考慮要裝置啟動時,可以自己設定以上的環境,所以考慮要將上面寫成一個Script,放置在/etc/init.d/S1檔案裡

#!/bin/sh mount -o bind /jffs/opt /opt export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/jffs/opt/bin export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib


但存檔的時候,它告訴我READ ONLY~ crybaby
不曉得該如何達到開動時自己設定環境的功能呢?
謝謝。




離線

 

#2 2008-10-20 17:13:23

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

找到資料了 http://www.dd-wrt.com/wiki/index.php/Startup_Scripts



離線

 

#3 2008-10-20 21:44:59

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

先恭喜您找到參考資料. 另外, 以下幾點提供您參考:
1. DD-WRT檯面上最新版本v24 SP1, 檯面下v24 SP2
2. 您要開機啟用的script, 可放在/jffs/etc/config 或系統管理--> 啟動指令內.
3. /etc實際是flash memory, 能寫入的是/tmp及您mount的USB Flash. 您提及的連結URL是撰寫系統啟動指令, 並無解決您read only問題.
4. 您所撰寫的script, 在該shell能引用您設定的變數, 離開該shell, $PATH, $LD_LIBRARY_PATH會恢復. 請參考Study Area


離線

 

#4 2008-10-20 22:01:40

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

在我的目錄中只有/jffs,/jffs裡面並沒有etc的目錄,於是我建立了etc的目錄,並在etc的目錄建立一個config的目錄,在裡面新增一個shell script,名為myboot.startup
內容為:

#!/bin/sh mount -o bind /jffs/opt /opt export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/jffs/opt/bin export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib


我重新將ASUS WL-500gP重新開機之後,執行「env」,觀察PATH及LD_LIBRARY_PATH的值都沒有更新,還是原來的舊值。

而我照著:
1. Using the Web Interface, goto the Administration tab.
2. Go to the Command subtab
3. Type the commands you wish to run every startup into the Commands: dialog box

mount -o bind /jffs/opt /opt export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/jffs/opt/bin export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib


4. Click the Save Startup button at the bottom of the page if you'd like the commands to save into the rc_startup variable.

重新開機之後,執行[env],還是一樣沒有變更,而且JFFS2 Support被改成Disable。

關於你說的第4點,這一點是我遇到的狀況,所以我才想開機時就設定環境變數。
不曉得還有那裡要注意的呢?謝謝。


離線

 

#5 2008-10-20 23:22:28

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

1. jffs2必須啟用
2. 使用系統啟動指令更改變數值, 並非真正更改內建變數值. 想像一下, 系統指令被shell包裹住; 您telnet進入, 又是另一個不同的shell包裹住. 兩個shell繼承相同的父shell變數值, 可覆寫父變數值. 離開自己的shell, 當然就回到父shell的變數值. 例如: 您可開兩個終端機視窗分別telnet, 當您更改其中一個的變數值, 看看是否會連帶更動另一telnet視窗的變數值. 之前提及的Study Area有詳細說明.
3. 反向思考一下, 您更改變數值要作哪些事? 執行指令後的結果, 在離開後, 是否結果不存在或變動? 如果結果是您要的, 而且沒異動, 那開幾層shell, 更改變數值達到您要的, 再回到父shell, 變數值仍是原設定值, 有關係嗎? 因為您已得到您要的結果了.
4. 如果您很在意環境變數, 而想做修改, 或許可從nvram著手. 不過, 要注意是否會影響原DD-WRT的運作.



離線

 

#6 2008-10-21 10:01:54

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

我了解你意思了。milk 非常感激。


離線

 

#7 2008-10-21 14:26:01

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

希望您在改機過程中學的更多, 也歡迎您有任何心得上來發表.smile


離線

 

#8 2008-10-24 11:31:04

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

我想要更改父shell的環境變數值。

~ # nvram set rc_startup=" > mount -o bind /jffs/opt /opt > PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/jffs/opt/bin > LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib > " ~ # nvram commit nvram_commit(): end ~ # reboot


但以上的方式試出來不行,重新登入之後,執行「env」,還是原本的父shell環境變數值。
我無法更改父shell環境變數值?crybaby


離線

 

#9 2008-10-24 12:38:51

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

1. rc_startup是系統管理--> 啟動指令的存放位置. 之前提及的nvram是錯誤方向, 請忽略. 抱歉.
2. 不知您是否注意到每個script前面為何要有"#!/bin/sh", 了解該行的意思嗎?
3. 請您再參考Study Area, 可解決您的疑惑.


離線

 

#10 2008-10-24 14:39:21

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: 開機時啟動程式 /etc/init.d/rcS 發生Read Only

在Linux平台上,使用者有一個設定檔.bash_profile,我只要設定過之後,再下一次登入時,設定就會生效,不需要每次Telnet至主機時,都要重新export PATH及LD_LIBRARY_PATH。

而現在我的方式就是想比照辦理,看能不能設定父Shell的環境變數,在每一次登入時就不需要重新export PATH及LD_LIBRARY_PATH。
試了Shell Script MethodNVRAM Method,結果都沒辦法達成預期的結果。


離線

 

相關討論主題

主題 回覆 點閱 最後發表
2 15914 2013-11-09 01:58:33 作者 Xvon

友情連結

論壇頁尾

Powered by PunBB
© Copyright 2018 Rickard Andersson
RSS Feed