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

2019年4月12日 星期五

Ubuntu16.04 GRUB開機選單順序


若電腦具有兩個以上的系統,

通常會有開機選單供使用者選擇要以何種系統開機,

以Ubuntu / window 雙系統為例子,

今天就來了解如何修改

Ubuntu16.04 GRUB開機選單順序


首先重新開機確認下要更改的系統位於第幾個選項,

接著到Ubuntu 系統中 ,

找到 /boot/grub/grub.cfg

找到set default = "0",




此範例舉的例子為:

windows 10 與 Ubuntu 雙系統為例子,

最底層的每一個menuentry就是一個開機選項,

第0個為Ubuntu,

由於windows10 排在第四個,

故此處將這個值改為3

存檔後重新開機即可看到順序變更,



提供給具有多重開機選項的使用者做為參考





2019年4月11日 星期四

讓windows系統存取Ubuntu ext4磁碟


如果有安裝過Ubuntu與windows雙系統的使用者,

Ubuntu安裝完畢自動會掛載windows磁碟,

那反過來若是要在windows掛載Ubuntu磁碟的話,

就要透過特殊軟體Ext2Fsd來實現

讓windows系統存取Ubuntu ext4磁碟


Ext2Fsd是一個開源軟體,

它可以讓使用者在windows環境底下讀取ext2/ext3/ext4格式的磁區,

也就是說有Ubuntu/windows雙系統的電腦,

不需要切換到Ubuntu開機就能夠開啟Ubuntu中的文件,


1.首先要到ext2fsd官方網站下載軟體

下載完畢後安裝


出現歡迎畫面後按下一步,

選擇要安裝的資料夾


選擇安裝的元件(只有一個其實也不用選)


選擇程式集位置


讓程式開機時自動執行,

並讓系統具有寫入權限


安裝完畢後,

可選擇執行進入Ext2Fsd工具


64Bit系統使用者記得要使用V0.69之後的版本,

以免存取有問題,

進入畫面後會列出目前磁碟機狀態,



在要掛載的ext4分區上按滑鼠右鍵,

選擇Assign Drive Letter 給予磁碟機代號


如果不想每次開機都要手動給予磁碟機代號,

也可以到Ext2 Volume Management中


找到MountPoint for fixed disk,need reboot,

這樣就能夠開機自動掛載該磁區了



若是重新開機後,

沒看到掛載的Ubuntu磁區,

可到Servicce Management中


檢查一下目前狀態(Service status),

並確定Service startup mode 是否正確





2019年2月27日 星期三

Ubuntu 16.04 開機自動執行程式


在程式開發中,

一些service 或者程式需要重開機也能自行載入,

這時就要透過設定開機自動執行程式的步驟,

也就是今天要來教大家的:

Ubuntu 16.04 開機自動執行程式


方法一:

rc.local 是linux中著名的開機自動執行檔,

一般Linux系統該檔案都放置在/etc/init.d/rc.local ,

在Ubuntu中有些許不同,

必須修改/etc/rc.local,


利用vi 編輯/etc/rc.local,



sh /etc/init.d/test.sh

加到exit 0 的上方後

拷貝要自動執行的script檔到/etc/init.d/中,

sudo reboot 進行測試



利用

sudo cat /var/log/syslog | grep test

搜尋剛才的程式是否有執行

在上圖可看到

rc.local [1792] : test






第二個方法是:

同樣將測試的script拷貝到/etc/init.d/中

執行

update-rc.d opt_auto.sh defaults 99

來新增一個自動執行的服務,

要移除的話也很簡單,

透過:

update-rc.d -f opt_auto.sh remove

即可



sudo reboot之後,

一樣到  /var/log/syslog 可找到類似下圖的log

表示設定成功




2019年2月19日 星期二

vi文字編輯器常用指令與windows快捷鍵對照


凡使用過Linux系統的使用者,

想必應該也聽過vi文字編輯器,

它是由1976年至今還屹立不搖的內建文字編輯器,

今天就以

vi文字編輯器常用指令與windows快捷鍵對照


來教大家使用它

vi有兩種模式

命令模式與輸入模式,

從Linux的命令提示字元輸入vi

就能進入此文字編輯器,

預設為命令模式

可用 a 或者 i 進入輸入模式

按ESC可回到命令模式

首先就由最常用的複製貼上功能來介紹vi

1.
在windows上以shift+方向鍵,

就能夠選取文字,

而在vi則是在命令模式輸入 v,

然後再以方向鍵選取文字,

選取的文字會以反白方式顯示,

同時在視窗的左下角會提示目前在選取功能中


選取文字可用來進行文字的複製貼上,

複製在windows 快捷鍵為  ctrl + c ,

而在vi中則是選擇完文字以後按 y 即可,



貼上在windows 快捷鍵為 ctrl + v

在vi中則是以 p 來實現,

如下圖,

可以看到之前選取的文字已經複製一份貼上


想取消執行上一步,

在windows 使用 ctrl + z

在vi使用 u 即可



而剪下在windows上為ctrl + x

在vi中選取文字以後使用 d 進行剪下動作



按下d之後,

可看到上圖所選的文字已經被剪下


而剪下後貼上,

vi 依舊是打 p 


既然編輯文字,

有時打開文件要搜尋裡面字串,

在windows上以 ctrl + f 來搜尋,

vi中則以 / 開始搜尋,

視窗的左下角可看到出現 /


打上要搜尋的字串以後,

按enter,

vi就會跳到搜尋結果,

若想找下一個按 n 即可


修改文件之後要存檔在windows 以 ctrl + s

在vi則是在命令模式下打冒號    :

w 就能存檔


若不想儲存修改可改用  q!  不存檔離開


取代字串

在windows相關的文書處理軟體中,

預設以 ctrl + h 打開取代功能視窗,

而 vi 編輯器則是先使用 ESC 鍵離開編輯模式,

再打底下命令來進行取代字串的設定,

:%s/尋找字串/取代字串/ic

最後的參數可以為:

g :整行,i :不分大小寫, c:詢問

此處範例為不分大小寫、取代前詢問。



2017年11月21日 星期二

在Linux系統執行windows應用程式的工具-Wine安裝教學

Wine 是一個容許在Linux執行windows應用程式的工具軟體,

它原來的名稱是 Windows Emulator ,

就是Windows 模擬器的意思,

但後來正名為 Wine Is Not Emulator ,

強調它並不是模擬器,


有興趣研究的,

可以到官方網站前往查詢

目前最新穩定版本為 2.0.3

安裝方式也很簡單,

就是本文所要說的重點


Wine安裝教學


以Ubuntu為範例,

如果運行64bit 系統的話,



請先執行

sudo dpkg --add-architecture i386



接著加入repository

wget -nc https://dl.winehq.org/wine-builds/Release.key

sudo apt-key add Release.key

sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/


更新package

sudo apt-get update


安裝Wine軟體

sudo apt-get install --install-recommends winehq-stable

從此就能夠在Linux上面執行windows應用程式了,



在之前的測試中,

可在Linux上面直接運行windows版本的遊戲, 

例如 

魔獸世界,

魔獸爭霸

等等


Wine 在Linux上面是一個很實用的工具,

但並非所有的應用程式都能夠透過Wine來執行,

畢竟 Linux 跟 windows 還是有差異的



安裝完畢以後,

可以直接用搜尋方式,

找到設定程式


可根據需要更改相關設定



Wine是透過相容層,

讓windows應用程式可以正常運行,

可在此選擇要使用的視窗環境


在相容環境中,

載入一些公用程式,

例如d3dx等函式庫


可在此新增虛擬磁碟機


安裝完也設定完畢之後,

那要如何使用呢?

很簡單,

在執行檔上面按右鍵,

選擇第一個

以Wine Windows Program Loader 開啟




如果要移除程式也很簡單,

在命令列打上 wine control

就可以在此移除應用程式


2017年10月17日 星期二

Ubuntu 16.04 新增SWAP置換空間

眾所皆知,

Ubuntu 安裝過程中系統會要求建立SWAP置換空間,

若是安裝完畢,

覺的當初設定的空間太小,

就能夠透過今天的主題

Ubuntu 16.04 新增SWAP置換空間

來實現這個要求

1. 首先先確認目前的置換空間狀態

sudo swapon -s

它會列出swap所在路徑(Filename) , 

Type 通常為partitation , 

Size 目前的置換空間大小

2.  到Ubuntu 程式集找到磁碟管理工具


3.
打開可以看到目前的磁碟機狀態,

圖中橘色的可用空間就是預留給今日主題的目標磁區,

在底下 " + " 的按鈕點左鍵建立新的分割區


4.
決定要配置的分割區大小

並選擇快速格式化

類型選擇支援Linux 的  Ext4


5.
新建立的磁區資訊如下

記住裝置路徑 /dev/sdb1


6. 到終端機中

執行:

sudo mkswap /dev/sdb1

7. 執行完畢,

設定開機自動啟動,

sudo gedit /etc/fstab

到最後面新增一行:

/dev/sdb1  swap swap defaults 0 0 

存檔之後重新開機


8. 進入系統之後,

到終端機執行

sudo swapon -s

如果能看到新增的swap空間,

就表示設定成功











2016年5月3日 星期二

Agent admitted failure to sign using the key

使用SSH key 登入伺服器時.
當key值有更動可能會遇到:

Agent admitted failure to sign using the key.
Permission denied (publickey).

解決方法:

# start the ssh-agent in the background
eval "$(ssh-agent -s)"
Agent pid xxxx
ssh-add ~/.ssh/my_other_key
執行成功之後
會出現類似訊息:
Identity added: ~/.ssh/my-ssh-key (~/.ssh/my-ssh-key)
再次嘗試登入server即可

2016年4月9日 星期六

Ubuntu14.04升級16.04

安裝完Ubuntu之後,要從

Ubuntu14.04升級16.04

只需要透過網路即可.

當然升級之前,先把能更新的套件都更新:

sudo apt-get update && sudo apt-get dist-upgrade



接著檢查是否有新版本:

sudo update-manager -d




按下開始升級等待下載並安裝完成就可從

Ubuntu14.04升級16.04

2016年4月7日 星期四

ubuntu與windows 雙系統無法掛載硬碟

在Ubuntu與windows8/windows10 雙系統的電腦上面,

有可能會遇到無法掛載硬碟的情形,

ubuntu與windows 雙系統無法掛載硬碟

錯誤訊息可參考下圖

這是因為windows中快速啟動功能造成,

解決方法也很簡單,

到控制台找到電源選項中的定義電源按鈕(底下以windows10 畫面為例子.)



 把"開啟快速啟動"的打勾去掉. 再回到Ubuntu 就不會遇到

ubuntu與windows 雙系統無法掛載硬碟 的問題了

2016年4月6日 星期三

ubuntu 14.04 blender中文設定

之前曾經介紹過Blender中文環境設定.

但是直接從Ubuntu安裝的Blender

在設定中文之後所有文字均變為方框


處理方式很簡單,


ubuntu 14.04 blender中文設定


1.

在主控台執行底下指令

sudo add-apt-repository ppa:irie/blender


sudo apt-get update


sudo apt-get install blender


在終端機執行完這三個動作之後.


照著前文:Blender中文環境設定

就能夠完成


ubuntu 14.04 blender中文設定



2015年5月27日 星期三

[Android]Linux kernel 開發基礎 (六)- Interrupt

系統運作,有時要停下處理event,
這時候,可利用interrupt中斷去處理event之後再繼續運作,
尤其是輸入裝置通知有資料要送給系統時候,interrupt是一個好方法.

1.設定interrupt pin,以及觸發條件(
IRQF_TRIGGER_RISING ,    上升緣觸發
IRQF_TRIGGER_FALLING ,下降緣觸發
IRQF_TRIGGER_HIGH,         高準位觸發
IRQF_TRIGGER_LOW           低準位觸發)

  hello_irq_gpio = gpio_to_irq(/*put the interrupt pin here .*/);
    ret = request_threaded_irq(hello_irq_gpio, NULL, hello_interrupt,
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
"hello", hello_data);
if (ret < 0) {
printk("[hello.c]Failed to register interrupt\n");
}

2.設定觸發條件之後的處理:
static irqreturn_t hello_interrupt(int irq, void *dev_id)
{
printk("interrupt enter and define the behavior here \n");

return IRQ_HANDLED;
}


範例程式下載

2015年5月23日 星期六

[Android]Linux kernel 開發基礎 (五)- driver attribute

透過driver attribute的讀寫,

可以讓使用者用讀寫檔案方式,直接跟driver溝通,

這在debug與其他driver之間互動提供了簡便的方法,

要在driver定義attribute只需要兩個步驟

1. 定義attribute本身:


static ssize_t hello_show(struct device *dev,struct device_attribute *attr, char *buf)
{


printk("hello_show \n");

return 0;
}
static ssize_t hello_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t size)
{
printk("hello_store \n");
return -1;
}

static struct device_attribute hello_adv_setting = {
.attr = {
.name = "hello_adv",
.mode = 0664,
},
.show = hello_show,
.store = hello_store,
};

static struct device_attribute *hello_adv_group[] = {
&hello_adv_setting,
// &hello_adv_setting2,

};

2. 在driver建立attribute檔案

for (i = 0; i < ARRAY_SIZE(hello_adv_group); i++) { ret = device_create_file(&pdev->dev,hello_adv_group[i]);
if (ret) {
dev_err(&pdev->dev, "failed: sysfs file %s\n",hello_adv_group[i]->attr.name);
}
}

如果還不是很明白,

可以下載範例程式來觀看

2015年4月20日 星期一

[Android]Linux kernel 開發基礎 (四)- 新增I2C device 範例

新增platform device 範例 是直接向platform bus註冊一個裝置
其他較常見的裝置要註冊也是大同小異,
makefile 與 kconfig 寫法是相同的,差異在於在哪個Bus下註冊裝置
底下為新增I2C device 範例:
1. makefile
根據kconfig的設定,定義要build的檔案
例如範例中的
obj-$(CONFIG_HELLO_DRIVER) += hello.o
這裡定義了:當CONFIG_HELLO_DRIVER為y
就將hello這個檔案build進kernel

2. kconfig
定義了driver 簡易描述以及預設值,與makefile一起,為kernel建立tree管理之用,
在make menuconfig時,可將該driver相關訊息顯示在視窗界面
config HELLO_DRIVER
    default y
    tristate "Hello Driver"
help
  Say Y here if you want to enable hello driver.
這裡定義了一個新的driver HELLO_DRIVER,,
預設值為y

3.如果要向I2C bus註冊新裝置,必須先找到I2C bus initial 的檔案(根據每個BSP設計不同,這個位置與名稱也不同,通常位於kernel/arch/arm/"cpu_name"),透過i2c_register_board_info來註冊新裝置,
(參考自: https://www.kernel.org/doc/htmldocs/device-drivers/API-i2c-register-board-info.html)

Name

i2c_register_board_info — statically declare I2C devices

Synopsis

int i2c_register_board_info (int busnum,
struct i2c_board_info const * info,
unsigned len);

Arguments


busnum
identifies the bus to which these devices belong
info
vector of i2c device descriptors
len
how many descriptors in the vector; may be zero to reserve the specified bus number.
例如:
i2c_register_board_info(i2c_bus_num, i2c_devs_define, ARRAY_SIZE(i2c_devs_define));

而i2c_devs_define 必須明確指出i2c device address 與i2c_bus_num才能根據設定將資料送到該裝置 ,定義範例如下:

static struct i2c_board_info i2c_devs_define[] __initdata = {
{
I2C_BOARD_INFO(i2c_device_name, i2c_address >> 1),
.irq = IRQ_EINT(IRQ_num),
},
};

4.最後調用i2c_add_driver(&i2c_driver);即可完成I2C device 新增

static const unsigned short normal_i2c[2] = {i2c_address,I2C_CLIENT_END};
static struct i2c_driver i2c_driver = {
.driver = {
.name = i2c_device_name,
.owner = THIS_MODULE,
},
.class = I2C_CLASS_HWMON,
.address_list = normal_i2c,
.id_table = id,
.probe = probe,
.remove = __exit_p(remove),
.suspend = suspend,
    .resume = resume,

};
i2c_add_driver(&i2c_driver);

Linux kernel 開發基礎 (三)- 新增platform device

新增platform device


並不複雜,

只需要更改三個地方

1. makefile

根據kconfig的設定,

定義要build的檔案

例如範例中的

obj-$(CONFIG_HELLO_DRIVER) += hello.o

這裡定義了:

CONFIG_HELLO_DRIVER為y

就將hello這個檔案build進kernel



2. kconfig

定義了driver 簡易描述以及預設值,

與makefile一起,

為kernel建立tree管理之用,

在make menuconfig時,

可將該driver相關訊息顯示在視窗界面

config HELLO_DRIVER
    default y
    tristate "Hello Driver"
help
 Say Y here if you want to enable hello driver.

這裡定義了一個新的driver HELLO_DRIVER,,

預設值為y

3. driver本身

static struct platform_driver hello_driver = {
.probe = hello_probe,
.remove = __devexit_p(hello_remove),
.driver = {
.name = "hello",
.owner = THIS_MODULE,
},
.suspend = hello_suspend,
.resume = hello_resume,
};

driver定義著platform device的功能,

如果還是不是很了解,

可以下載範例程式去build 看看

2015年4月17日 星期五

[Android]Linux kernel 開發基礎 (二)- platform device

Linux自2.6之後導入新的驅動管理與註冊機制,在這樣的設計下,
bus , device , driver. 三者就是必須了解的基本元素.
CPU要執行某裝置的功能簡單的流程如下:
CPU->bus->device->driver
1. Bus 是CPU與各個裝置的連結通道,CPU 透過bus找到device.
2. Device是接在bus上的實體裝置
3. Driver則詳細定義了裝置的各項功能

Platform bus 是一個虛擬通道,現在大多數裝置都是建立在platform bus 上.
它可分為兩部份: platform_device 與 platform_driver

platform_device 的基礎定義:


struct platform_device {
 const char *name;
 u32  id;
 struct device dev;
 u32  num_resources;
 struct resource *resource;
};
platform_driver的基礎定義
struct platform_driver {
 int (*probe)(struct platform_device *);
 int (*remove)(struct platform_device *);
 void (*shutdown)(struct platform_device *);
 int (*suspend)(struct platform_device *, pm_message_t state);
 int (*suspend_late)(struct platform_device *, pm_message_t state);
 int (*resume_early)(struct platform_device *);
 int (*resume)(struct platform_device *);
 struct device_driver driver;
};
要利用platform bus管理裝置可透過:
int platform_device_add(struct platform_device *pdev);
int platform_device_register(struct platform_device *);
來註冊裝置.

這些定義可以在
kernel/include/linux/platform_device.h找到.






2013年11月30日 星期六

Linux kernel 開發基礎 (一)- Driver 基本概念

開發Linux kernel driver時

經常使用make menuconfig來進行kernel的設定

簡單來說,

這個指令會掃描每個目錄中的Kconfig,

收集其中的訊息與相關設定並將其秀在視窗上供開發者方便設定kernel,

開發者設定完畢後儲存會將這些設定統一存在Linux kernel 根目錄底下

一個隱藏檔: .config

定義的資料有可能長這樣:

config Hello
bool "Hello title"
depends Module
help
Hello detail message




一般而言,

如果沒有設定driver載入的預設值,

系統會出現Y/N/M 三種選項讓你選擇每個driver的載入方式.

在Android的Linux kernel中

通常會把預設值放在kernel/arch/arm/configs目錄裡面

在每個目錄裡面除了Kconfig之外還有一個檔案Makefile,

定義有哪些source code需要complier.

舉例來說

obj-y += hello.o

意思是目錄中有一個hello.c需要complier

綜合以上所說,

簡單來說一個最精簡的Linux kernel driver需要三個檔案

driver本身.c ,Kconfig , makefile

2013年11月9日 星期六

[Linux]Git 基本指令

Git 在Linux中用於版本控制相當常見
在windows下也能夠使用
(windows下載點)

一些常用的基本指令:

A.第一次下載
git clone ssh://USER@ip位址/git目錄


B.單一檔案新增或者有變更 要上傳到server
1. git add 檔案名稱
2. git commit -m "這裡寫註解(簡單描述下)"
3. git push


C.檔案放棄變更 並還原到上次commit的狀態
情況0:當執行完 B-1 git add 檔案名稱 ,這個步驟時候想取消檔案的add,不保留修改的單一檔案
1.git reset HEAD 檔案名稱

情況1:當執行完 B-2 git commit -m "這裡寫註解" ,這個步驟時候想取消單一檔案的commit,不保留修改的單一檔案
1. git checkout -- 檔案名稱

情況2:當執行完 B-2 git commit -m "這裡寫註解" ,這個步驟時候想取消多個檔案的commit,不保留修改的多個檔案
1.git reset --hard HEAD^

情況3:當執行完 B-2 git commit -m "這裡寫註解" ,這個步驟時候想取消多個檔案的commit,保留修改的多個檔案
1.git reset --soft HEAD^


D.從遠端更新
1.git pull


E.新增TAG
1.git tag -a Tag名稱 -m "message.."
2.git push origin Tag名稱


F.刪除TAG
1.先刪除遠端tag:
git push origin :refs/tags/Tag名稱
2.刪除local端
git tag -d Tag名稱


G.初始設定(第一次上傳code)
1.mkdir 目錄名稱
2.cd 目錄名稱
3.git init --bare --shared
4.git remote add origin ssh://USER@ip位址/git目錄

2013年8月29日 星期四

在Ubuntu 12.04安裝SKYPE4.2

在Ubuntu 12.04安裝SKYPE4.2


步驟:

1.到官方網站下載適合的版本

2.下載完之後執行.會出現如下.

於右上方點選"安裝".

輸入管理者密碼即可開始安裝




3.第一次登入會出現使用條款宣告.

選擇"同意"繼續



4.可選擇用MSN帳號登入或者skype帳號登入