Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 34

0
votes
answers
8 views
+10

emacs ocaml REPL:「搜索程序:沒有這樣的文件或目錄,ocaml」

0

我試圖在Ubuntu 16.04.3在VirtualBox上設置OCaml。我對他們都是新手;請原諒我的無知。我使用emacs ocaml REPL:「搜索程序:沒有這樣的文件或目錄,ocaml」

wget https://raw.github.com/ocaml/opam/master/shell/opam_installer.sh -O - | sh -s /usr/local/bin 

安裝opam,並根據以下的opam安裝說明添加

. /home/<username>/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true 

~/.profile文件。我使用opam install tuaregGNU emacs 24.5.1使用sudo apt-get install emacs來安裝tuareg

當我試圖在Emacs中鍵入M-x run-ocamlreturn使用ocaml REPL,我OCaml REPL to run: ocaml;當我再次打enter,我

Searching for program: no such file or directory, ocaml 

然後我試圖M-x shell,看看我是否可以運行外殼ocaml,我發現我需要使用opam switch我想從終端/ shell中運行ocaml每次;如果我直接鍵入ocaml,我會得到

The program 'ocaml' is currently not installed. You can install it by typing: sudo apt-get install ocaml-interp 

我不知道這是否有什麼關係,我發現了問題。

作爲第二次嘗試,我又回到了Emacs和類型M-x run-ocaml,打return,並在OCaml REPL to run:再次命中return(這次沒有ocaml)。這開闢了一個新的緩衝區:

output file descriptor closed

但是,當我試圖在新的緩衝區類的東西,說1+1;;,並創下shift-return,我得到Output file descriptor of OCaml is closed,如上圖所示。

我一直在閱讀不同的文檔和線索的指示,但他們都沒有描述我的情況。任何幫助將非常感激!

沙发
0
1

也許你應該嘗試像M-x run-ocamlreturn,然後鍵入類似/usr/bin/opam config exec -- ocaml(或任何路徑到您的OPAM安裝),而不是ocaml

板凳
0
0

所以我按照realworldocaml解決了這個問題。我意識到我的帖子中有幾個問題,所以我使用這個答案 分享鏈接中建議的每個解決方案。

@ ghilesZ的回答完美地解決了我的問題標題(謝謝!)中的問題。我應該在M-x命令(正如上面的答案所示)或~/.emacs配置文件中(如鏈接所暗示的)添加ocaml的路徑。完成以下步驟後,可以通過在終端中輸入which ocaml來獲取路徑。

需鍵入

eval `opam config env` 

運行從終端ocaml可以通過將行到~/.bashrc文件來解決。這是因爲在當前shell中輸入命令只會爲當前shell設置一些東西。爲了讓將來的shell自動設置,它需要被添加到登錄腳本中。

0
votes
answers
8 views
+10

linux shell複製粘貼將?0和1?符號添加到字符串

0

我正在運行Ubuntu 16.04。最近,我在通過剪貼板複製粘貼時遇到以下奇怪的行爲,例如,假設我想克隆一些存儲庫。所以,我複製下面的字符串:linux shell複製粘貼將?0和1?符號添加到字符串

https://github.com/tensorflow/tensorflow

,然後使用Ctrl + Shift + V粘貼到我的殼git clone之後。我希望:

$ git clone https://github.com/tensorflow/tensorflow

而是我看到

$ git clone ~0https://github.com/tensorflow/tensorflow1~

這不會發生的事情,我還沒有想通了,是什麼原因導致這種令人討厭的行爲。任何人遇到這種情況,並有人發現如何擺脫它?

+1

也許這[鏈接](https://unix.stackexchange.com/questions/196098/copy-paste-in-xfce4-terminal-adds-0-and-1)回答你的問題。 – Robin

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。 – jww

沙发
0
-1

嘗試在此處找到解決方案:http://midnight-commander.org/ticket/3207 TL; DR看起來像Ubuntu軟件包中的錯誤。 你可以複製選擇它的文本,並用鼠標按下滾動按鈕粘貼,這樣可以避免你現在遇到的麻煩。

0
votes
answers
8 views
+10

使用Xen創建虛擬機時出錯

0

因此,我一直在關注本教程:https://help.ubuntu.com/community/Xen以幫助我使用安裝在Ubuntu 16.04中的Xen軟件創建虛擬機。我已經成功地安裝了Xen虛擬機管理程序,並且已經創建了虛擬捲來安裝虛擬機,全部根據教程。使用Xen創建虛擬機時出錯

但是在本教程的「手動創建PV Guest虛擬機」一節中,我應該修改一個名爲「ubud1.cfg」的文檔並將一些行粘貼到該文檔中。完成後,我應該通過命令安裝VM:

sudo xl create -c /etc/xen/ubud1.cfg 

但這不起作用。它產生的錯誤消息

分析配置從/etc/xen/ubud1.cfg libxl:錯誤:libxl_exec.c:118:libxl_report_child_exitstatus:在/ etc/xen的/腳本/ VIF-openvswitch在線[6473]與退出錯誤狀態1 libxl:error:libxl_device.c:1138:device_hotplug_child_death_cb:script:無法找到ovs-vsctl工具 libxl:error:libxl_create.c:1384:domcreate_attach_vtpms:無法添加nic設備 libxl:error:libxl.c :1610:libxl__destroy_domid:不存在的域6 libxl:錯誤:libxl.c:1568:domain_destroy_callback:無法使用domid銷燬guest虛擬機6 libxl:錯誤:libxl.c:1495:domain_destroy_cb:域6的銷燬失敗

我不知道我做錯了什麼。我已經按照教程完成了一切,但我覺得我錯過了一些東西。我不是很瞭解Ubuntu,我不知道這個終端產生的錯誤信息是什麼意思,這就是爲什麼我來這裏尋求幫助。

沙发
0
0

有同樣的問題。您是否在本教程的早期使用了bridge-utils網絡橋接,而不是openvswitch-switch?如果是這樣,請在ubud1.cfg文件中註釋掉這一行。

# Custom option for Open vSwitch vif = [ 'script=vif-openvswitch,bridge=ovsbr0' ]

這讓新的虛擬機啓動,但我顯然配置橋utils的錯誤,所以我沒有網絡接口呢。祝你好運。

0
votes
answers
8 views
+10

將值插入數組並顯示,nasm

0

首先,這是一項家庭作業。將值插入數組並顯示,nasm

我有一個循環獲得兩個數字的值單獨,並加入他們的第一個數字乘以10,並加上第二個數字來獲得一個整數。

我正在做這一切,並保存在我的AL寄存器中,現在我想將該整數插入到一個數組中,然後掃描該數組並顯示這些數字。

如何插入矢量並從矢量讀取?

我的數組:

section .bss 
    array resb 200 

我的數字轉換:

sub byte[digit_une], 30h 
sub byte[digit_two], 30h 

mov al, byte[digit_one]   
mov dl, 10     ;dl = 10 
mul dl      ;al = ax = 10 * digit_one 
add al, byte[digit_two]  ;al = al + digit_two = digit_one * 10 + digit_two 
+0

與'digito_um'一樣是'digit_one'嗎?你是否在同一個地方有兩個標籤,或者只有一半標籤翻譯成英文?如果它們不在同一地點,那麼'sub'指令與乘法無關。 –

+0

當你說「插入」時,你的意思是你想複製一個以後的所有元素(比如[C++'std :: vector :: insert'](http://en.cppreference.com/w/cpp /容器/載體/插入)),或者你想覆蓋一個元素,如正常的數組元素分配?或者你的意思是一個SIMD向量(像'xmm0',使用'pinsrb xmm0,eax,5'來替換'xmm0'的字節5'al')? –

+0

什麼是目標平臺... Ubuntu的? 32或64位二進制? – Ped7g

沙发
0
2

「陣列」, 「載體」,等等......所有這些都是更高層次的概念。該機器具有可通過單字節尋址的存儲器,以及您使用代碼實現的邏輯類型,這取決於您。但是你應該能夠在兩個層面上思考它,就像內存中的單個字節一樣,每個字節都有自己的地址,並且完全理解你的代碼邏輯,它將如何安排那些字節的使用以形成「一些東西」。

隨着您對.bss扇區的定義,您可以定義一個符號/標籤array,它等於.bss段開始的內存地址。然後你保留200字節的空間,所以你將添加的任何其他內容(如另一個標籤)將從地址.bss+200開始。

假設(例如)將二進制文件加載到內存並跳轉到入口點後,.bss位於地址0x1000

然後

mov dword [array],0x12345678 

將存儲4個字節到內存地址0x1000 .. 0x1003,與具有值78 56 34 12(即DWORD值的小端擊穿)特定字節。

如果你會做mov dword [array+199],0x12345678,你會寫值0x78到最後正式保留字節由resb 200,和其餘3個字節將覆蓋在地址的.bss + 200內存和.bss + 201和.bss + 202(可能會損壞一些其他數據,如果您將放置某些內容,或者崩潰應用程序,如果它將跨越內存頁面邊界,並且您處於可用內存的末尾)。

由於要到N 字節值存儲到陣列中,最簡單的邏輯是存儲第一值的地址array+0,第二在array+1等...(爲DWORD值最合乎邏輯的方法是array+0, array+4, array+8, ....) 。

mov [array+0],al可以用來存儲第一個值。但是這不是很實用,如果你正在閱讀某種循環的輸入。比方說,你想閱讀的用戶,或價值99最多200個值會結束得越早,那麼你可以通過註冊使用索引,如:

xor esi,esi ; rsi = index = 0 
    mov ecx,200 ; rcx = 200 (max inputs) 
input_loop: 

    ; do input into AL = 0..99 integer (preserve RSI and RCX!) 
    ... 

    cmp al,99 
    je input_loop_terminate 
    mov [array+rsi], al ; store the new value into array 
    inc rsi  ; ++index 
    dec rcx  ; --counter 
    jnz input_loop ; loop until counter is zero 
input_loop_terminate: 
    ; here RSI contains number of inputted values 
    ; and memory from address array contains byte values (w/o the 99) 

即對於用戶輸入32,72,13,0,16,99,地址0x1000處的存儲器將具有5個字節的修改,其中包含(現在是六進制):20 48 0D 00 10 ?? ?? ?? ...

如果你有些熟練的asm程序員,你不但可以通過寄存器索引,也可以避免使用硬編碼的array標籤,所以你可能會做一個子程序作爲參數目標地址(數組),最大數量:

; function to read user input, rsi = array address, rcx = max count 
; does modify many other registers 
; returns amount of inputted values in rax 
take_some_byte_values_from_user: 
    jrcxz .error_zero_max_count ; validate count argument 
    lea rdi,[rsi+rcx] ; rdi = address of first byte beyond buffer 
    neg rcx   ; rcx = -count (!) 
     ;^small trick to make counter work also as index 
     ; the index values will be: -200, -199, -198, ... 
     ; and that's perfect for that "address of byte beyond buffer" 
.input_loop: 

    ; do input into AL = 0..99 integer (preserve RSI, RDI and RCX!) 
    ... 

    cmp al,99 
    je .input_loop_terminate 
    mov [rdi+rcx], al ; store the new value into array 
    inc rcx   ; ++counter (and index) 
    jnz .input_loop ; loop until counter is zero 
.input_loop_terminate: 
    ; calculate inputted size into RAX 
    lea rax,[rdi+rcx] ; address beyond last written value 
    sub rax,rsi  ; rax = count of inputted values 
    ret 

.error_zero_max_count: 
    xor eax,eax  ; rax = 0, zero values were read 
    ret 

然後就可以調用從主代碼子程序是這樣的:

... 
    mov rsi,array ; rsi = address of reserved memory for data 
    mov ecx,200  ; rcx = max values count 
    call take_some_byte_values_from_user 
    ; keep RAX (array.length = "0..200" value) somewhere 
    test al,al  ; as 200 was max, testing only 8 bits is OK 
    jz no_input_from_user ; zero values were entered 
    ... 

對於字/雙字/四字元件陣列的x86內存操作數比例係數,這樣你就可以使用索引值會通過+1和地址ESS值等:

mov [array+4*rsi],eax ; store dword value into "array[rsi]" 

對於其他尺寸元素它通常是更有效的具有指針,而不是索引,並且通過這樣做add <pointer_reg>, <size_of_element>add rdi,96移動到下一個元素,以避免索引值的乘法對每個訪問。

etc ...讀取值返回的方式是相同的,但是顛倒了操作數。

順便說一句,這些例子並沒有像「覆蓋」它那麼多的「插入」值到數組中。計算機的內存已經存在,並且有一些值(.bss被libc或OS IIRC歸零?否則就會出現一些垃圾),所以它只是用來自用戶的值覆蓋舊的垃圾值。在resb中,仍有200字節的內存「保留」,並且您的代碼必須記錄實際大小(輸入值的計數),以瞭解用戶輸入結束的位置以及垃圾數據的起始位置(或者您最終可以編寫值99並將其用作「終止符」值,那麼只需要數組的地址來掃描它的內容,並在找到值99時停止)。

編輯:

以防萬一你仍然不知道爲什麼我有時會用方括號,有時沒有,這Q +一個看起來很詳細,YASM語法相同NASM括號用法:Basic use of immediates (square brackets) in x86 Assembly and yasm

+0

編寫'mov dword [array],0x12345678'更好。 (將'dword'說明符應用於內存操作數,而不是直接)。它在NASM語法中實際上並不明確,但是該慣例使得讀'add qword [rdi],嚴格的dword 0x12'('strict dword'完全獨立於'dword',意味着你想要imm32編碼,而不是imm8,這對於小的立即數是可能的。64位操作數大小仍然使用32位立即數。)無論如何,如果你在YASM qword中寫入'add qword [rdi],dword 0x12',那麼它是一個'add r/m64,imm8'。在NASM中,錯誤。 –

+0

Hrm,NASM扼流圈上'添加qword [rdi],嚴格雙字0x12'。看來你可以寫'添加qword [rdi],嚴格qword 0x12'來獲得'48 81 07 12 00 00 00',這是有點假,因爲它仍然是imm32。 YASM在那裏拒絕「嚴格的qword」,只接受「嚴格的dword」。無論如何,將大小放在內存操作數上,而不是立即數,以便與'strict'保持一致,以強制直接編碼大小。 –

+0

@PeterCordes @PeterCordes有趣的是,從來沒有這樣想過,操作碼有時候實際上包含不同的數據大小,並且cpu不會/符號將它們擴展爲正確的方式,但當然,你是絕對正確的。 – Ped7g

0
votes
answers
7 views
+10

將Apache重定向到/ media/...路徑後出現Apache錯誤403

0

從我的主磁盤(安裝操作系統的位置)移動文件到第二個磁盤(其他存儲)時,我試圖將Apache重定向到新的磁盤,但是這返回error number 403。我正在運行Ubuntu 16.04。將Apache重定向到/ media/...路徑後出現Apache錯誤403

我本來重定向Apache以/home/user/Documents通過添加以下行的相應文件:

/etc/apache2/apache2.conf

<Directory /home/jawa/Documents/> 
#<Directory /media/jawa/R2D2/Webpages> 
     Options Indexes FollowSymLinks 
     AllowOverride None 
     Require all granted 
</Directory> 

/etc/apache2/sites-enabled/000-default.conf

DocumentRoot /home/jawa/Documents 
#DocumentRoot /media/jawa/R2D2/Webpages 

這工作得很好,但因爲我有將文件移動到新的位置,我還必須重定向Apache。 嘗試將Apache重定向到/media/jawa/R2D2/Webpages時,我切換上述註釋並使用sudo service apache2 restart重新啓動Apache。在瀏覽器中訪問localhost返回error 403並且使用命令cat /var/log/apache2/error.log提供了以下日誌:

[Wed Dec 27 17:24:48.583062 2017] [core:error] [pid 22343] (13)Permission denied: [client ::1:35704] AH00035: access to/denied (filesystem path '/media/jawa/R2D2') because search permissions are missing on a component of the path 

權限和這兩個文件夾的所有者:

drwxr-xr-x 2 jawa jawa 4096 dec 27 17:12 Documents 
drwxrwxrwx 1 jawa jawa  0 dec 27 16:46 Webpages 

是什麼原因造成的錯誤,怎麼能解決嗎?

+0

您能提供以下輸出: ls -ld/home// home/jawa/home/jawa/Documents ls -ld/media// media/jawa// media/jawa/R2D2/media/jawa/R2D2 /網頁 – bubbly

+0

'/ media/jawa /'權限錯誤,'chmod 755'解決了這個問題。也許你可以解釋一下,爲什麼'/ media /'和其他所有內容被設置爲755或更高,但'/ media/jawa /'不是。不要回複評論,但寫一個正式的答案,所以我可以標記回答的問題。謝謝,亞歷克斯 – Alexander

沙发
0
1

因爲我們知道一個作品和其他沒有,同時列出文件夾結構的權限:

ls -ld /home/ /home/jawa /home/jawa/Documents 
ls -ld /media/ /media/jawa/ /media/jawa/R2D2 /media/jawa/R2D2/Webpages 

一旦上市比較兩個。
默認權限由umask控制,這可能會導致權限不同。

0
votes
answers
7 views
+10

缺少manage.py嘗試安裝石墨(Django的)

0

我試圖在Ubuntu上安裝石墨按照這裏給出的說明:缺少manage.py嘗試安裝石墨(Django的)

https://gist.github.com/albertohm/5697429

當我安裝的組件,尤其是Django的,我做的沒有得到任何錯誤。然而,當我運行這兩個命令

cd /opt/graphite/webapp/graphite 
sudo python manage.py syncdb 

我得到一個錯誤,說

manage.py找不到

我試圖建立石墨的許多不同的方式但是沒有人工作:-(
有人可以請幫助我,爲什麼manage.py不存在於石墨網絡文件夾中?

+0

'/選擇/石墨/ web應用/ graphite'是文件夾中的每個文檔,是因爲你的盒子相同的路徑?檢查您所有安裝的目錄的「pwd」! – NoobEditor

沙发
0
0

似乎你不在manage.py存在的目錄中。

python manage.py syncdb 

該命令僅適用於存在manage.py的情況。

所以使用cd命令,進入該目錄,然後運行上面的命令

0
votes
answers
7 views
+10

如何創建一個簡單的驅動程序? [Ubuntu]

-2

這個想法是創建一個可以通過設備進行通信的驅動程序和用戶應用程序。如何創建一個簡單的驅動程序? [Ubuntu]

當我編譯模塊時,將它附加到內核並創建設備,我沒有得到任何錯誤,但是當我啓動用戶應用程序時,它崩潰了。另外,在崩潰之後,我的電腦變慢了,有時甚至需要重啓我的系統。 我也讀過內核日誌文件,發現這個錯誤:[ 336.741386] BUG: unable to handle kernel NULL pointer dereference at (null)

你能告訴我,如果我的代碼有問題嗎?

驅動程序代碼:

#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/fs.h>   // Allows to open/read/write/execute a device 
#include <linux/cdev.h>   // Char driver; makes cdev available 
#include <linux/semaphore.h> // Used to access semaphores; used for synchronization for avoiding crashes 
#include <asm/uaccess.h>  // Copy_to_user;copy_from_user 

struct fake_device{ 
    char data[100]; 
    struct semaphore sem; 
}virtual_device; 

struct cdev *mcdev;  // My Char device driver 
int major_number; 
int ret; 

dev_t dev_num; 

#define DEVICE_NAME "looperdevice" 

int device_open(struct inode *inode, struct file *filp){ 
    if(down_interruptible(&virtual_device.sem) != 0){ 
     printk(KERN_ALERT "looperdevice: could not lock device during open"); 
     return -1; 
    } 
    printk(KERN_INFO "looperdevice: opened device"); 
    return 0; 

} 
ssize_t device_read(struct file* filp, char* bufStoreData, size_t bufCount, loff_t* curOffset){ 
    printk(KERN_INFO "looperdevice: Reading from device"); 
    ret = copy_to_user(bufStoreData, virtual_device.data, bufCount); 
    return ret; 
} 

ssize_t device_write(struct file* filp, const char* bufSourceData, size_t bufCount, loff_t* curOffset){ 
    printk(KERN_INFO "looperdevice: Writing to device"); 
    ret = copy_from_user(virtual_device.data, bufSourceData, bufCount); 
    return ret; 
} 

int device_close(struct inode *inode, struct file *filp){ 
    printk(KERN_INFO "looperdevice: Closing device"); 
    up(&virtual_device.sem); // Set semaphore up 
    return 0; 
} 


struct file_operations fops = { 
    .owner = THIS_MODULE, 
    .open = device_open, 
    .release = device_close, 
    .write = device_write, 
    .read = device_read 
}; 

static int driver_entry(void){ 
    /* 
    Register our device in the system 
    alloc_chrdev_region(dev_t*, uint fminor, uint count, char* name) 
    */ 
    ret = alloc_chrdev_region(&dev_num, 0, 1, DEVICE_NAME); // Will store minor and max number into dev_num, for future extraction 
    if (ret < 0){ 
     printk(KERN_ALERT "looperdevice: failed to allocate a major number"); 
     return ret; 
    } 
    // Extracting major number 
    major_number = MAJOR(dev_num); 
    printk(KERN_INFO "looperdevice: major_number extracted, %d", major_number); 
    printk(KERN_INFO "	use "mknod /dev/%s c %d 0" for device file",DEVICE_NAME, major_number); 

    mcdev = cdev_alloc(); // Create our cdev structure already initializated 
    mcdev->ops = &fops;  // struct file operations 
    mcdev->owner = THIS_MODULE; 
    // Now that we created the cdev we have to add it to the kernel 
    // int cdev_add(struct cdev* dev, dev_t num, unsigned int count) 
    ret = cdev_add(mcdev, dev_num, 1); 
    if (ret < 0){ 
     printk(KERN_ALERT "looperdevice: unable to add cdev to kernel"); 
     return ret; 

    } 
    // Initialize our semaphore 
    sema_init(&virtual_device.sem, 1); 

    return 0; 
} 
static void driver_exit(void){ 
    cdev_del(mcdev); 
    unregister_chrdev_region(dev_num,1); 
    printk(KERN_ALERT "looperdevice: Unloaded module"); 

} 

module_init(driver_entry); 
module_exit(driver_exit); 

用戶應用代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <fcntl.h> 

#define DEVICE "/dev/looperdevice" 

int main(){ 
    int i, fd, ch; 
    char write_buf[100], read_buf[100]; 
    fd = open(DEVICE, O_RDWR); 
    if (fd == -1){ 
     printf("file %s either does not exist or has been locked by another process
", DEVICE); 
     exit(-1); 
    } 
    printf("Looper application v0.1 Beta
"); 
    while (ch != 3){ 
     printf("--------------MENU-------------
"); 
     printf("1. Read from device
2. Write to device
3. Exit"); 
     printf("Choose an option: "); 
     scanf("%d", &ch); 
     switch(ch){ 
      case 1: 
       // reading from device 
       read(fd, read_buf, sizeof(read_buf)); 
       printf("DEVICE: %s
", read_buf); 
       break; 
      case 2: 
       // Writing to device 
       printf("Enter Data: "); 
       gets(write_buf); 
       write(fd, write_buf, sizeof(write_buf)); 
       break; 
      case 3: 
       exit(0); 
       break; 
      default: 
       printf("Invalid option
"); 
       break; 
     } 
    } 
    return 0; 
} 

內核日誌文件:

[ 321.242532] driver: module license 'unspecified' taints kernel. 
[ 321.242534] Disabling lock debugging due to kernel taint 
[ 321.243024] looperdevice: major_number extracted, 241 
[ 321.243026] use "mknod /dev/looperdevice c 241 0" for device file 
[ 321.243028] looperdevice: unable to add cdev to kernel 
[ 336.741386] BUG: unable to handle kernel NULL pointer dereference at           (null) 
[ 336.741524] IP: __down_interruptible+0x51/0xf0 
[ 336.741563] PGD a3279067 
[ 336.741564] PUD a3278067 
[ 336.741589] PMD 0 

[ 336.741650] Oops: 0002 [#1] SMP 
[ 336.741680] Modules linked in: driver(POE) ccm bnep pci_stub vboxpci(OE) vboxnetadp(OE) vboxnetflt(OE) vboxdrv(OE) dm_crypt dell_wmi sparse_keymap uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_core videodev media dell_laptop dell_smbios btusb dcdbas btrtl btbcm btintel dell_smm_hwmon bluetooth arc4 iwldvm mac80211 intel_rapl x86_pkg_temp_thermal intel_powerclamp snd_hda_codec_hdmi coretemp kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcbc snd_hda_codec_idt snd_hda_codec_generic aesni_intel aes_x86_64 crypto_simd glue_helper cryptd intel_cstate intel_rapl_perf snd_hda_intel snd_hda_codec snd_hda_core snd_hwdep snd_pcm input_leds snd_seq_midi joydev snd_seq_midi_event serio_raw snd_rawmidi snd_seq binfmt_misc iwlwifi snd_seq_device snd_timer cfg80211 
[ 336.742291] lpc_ich shpchp snd mei_me soundcore mei wmi dell_smo8800 mac_hid dell_rbtn parport_pc ppdev lp parport autofs4 hid_generic usbhid hid i915 ahci libahci psmouse i2c_algo_bit drm_kms_helper sdhci_pci sdhci syscopyarea sysfillrect e1000e sysimgblt fb_sys_fops drm ptp pps_core fjes video 
[ 336.742530] CPU: 2 PID: 3578 Comm: app Tainted: P   OE 4.10.0-37-generiC#41~16.04.1-Ubuntu 
[ 336.742607] Hardware name: Dell Inc. Latitude E5430 vPro/0NVFXC, BIOS A16 08/19/2015 
[ 336.742673] task: ffff96ace1e08000 task.stack: ffffb4d500b68000 
[ 336.742727] RIP: 0010:__down_interruptible+0x51/0xf0 
[ 336.742771] RSP: 0018:ffffb4d500b6bba0 EFLAGS: 00010046 
[ 336.742817] RAX: 0000000000000000 RBX: ffffffffc0be84c8 RCX: 0000000000000002 
[ 336.742878] RDX: ffffffffc0be84d0 RSI: 0000000000000292 RDI: ffffffffc0be84c8 
[ 336.742938] RBP: ffffb4d500b6bbe8 R08: 0000000000000000 R09: 0000000000000000 
[ 336.742998] R10: 00000000000000f1 R11: ffff96acaa4d6338 R12: 7fffffffffffffff 
[ 336.743058] R13: ffff96ace1e08000 R14: ffff96ace294eb00 R15: ffffffffaf9c5c80 
[ 336.743120] FS: 00007fadeade0700(0000) GS:ffff96ad5e300000(0000) knlGS:0000000000000000 
[ 336.743188] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 
[ 336.743237] CR2: 0000000000000000 CR3: 00000000a337a000 CR4: 00000000001406e0 
[ 336.743298] Call Trace: 
[ 336.743329] ? exact_lock+0x11/0x20 
[ 336.743363] down_interruptible+0x4b/0x60 
[ 336.743403] device_open+0x15/0x30 [driver] 
[ 336.743442] chrdev_open+0xbf/0x1b0 
[ 336.743477] do_dentry_open+0x208/0x310 
[ 336.743514] ? cdev_put+0x30/0x30 
[ 336.743548] vfs_open+0x4c/0x70 
[ 336.743581] ? may_open+0x9b/0x100 
[ 336.743620] path_openat+0x2ac/0x1430 
[ 336.743660] ? page_add_file_rmap+0x58/0x140 
[ 336.743702] do_filp_open+0x91/0x100 
[ 336.743738] ? __alloc_fd+0x46/0x170 
[ 336.743774] do_sys_open+0x12d/0x280 
[ 336.743809] SyS_open+0x1e/0x20 
[ 336.743841] entry_SYSCALL_64_fastpath+0x1e/0xad 
[ 336.743883] RIP: 0033:0x7fadea912010 
[ 336.743916] RSP: 002b:00007ffcf9ce3238 EFLAGS: 00000246 ORIG_RAX: 0000000000000002 
[ 336.743982] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fadea912010 
[ 336.744042] RDX: 00007ffcf9ce3428 RSI: 0000000000000002 RDI: 00000000004009b8 
[ 336.746348] RBP: 00007ffcf9ce3330 R08: 00000000004009a0 R09: 00007fadeabf5ab0 
[ 336.748583] R10: 000000000000069d R11: 0000000000000246 R12: 00000000004006b0 
[ 336.750831] R13: 00007ffcf9ce3410 R14: 0000000000000000 R15: 0000000000000000 
[ 336.753533] Code: 00 00 48 83 e4 f0 48 83 ec 30 65 48 8b 04 25 28 00 00 00 48 89 44 24 28 31 c0 48 8b 47 10 48 89 14 24 48 89 67 10 48 89 44 24 08 <48> 89 20 4c 89 6c 24 10 c6 44 24 18 00 eb 38 4d 85 e4 7e 52 49 
[ 336.758651] RIP: __down_interruptible+0x51/0xf0 RSP: ffffb4d500b6bba0 
[ 336.761183] CR2: 0000000000000000 
[ 336.775501] ---[ end trace 3fcbe3000944b329 ]--- 

我希望你能幫助我:)

+1

'當我編譯模塊,將其連接到內核和創建設備,我沒有得到任何error' - 根據日誌,你**將模塊加載到內核時出現錯誤**:'looperdevice:無法將cdev添加到內核'。根據驅動程序的代碼,模塊的加載應該被取消(因爲返回負值),所以進一步的「BUG」看起來可疑。 – Tsyvarev

沙发
0
0

解決方案是添加模塊蝨子NSE:

MODULE_LICENSE("GPL"); 

謝謝:)

0
votes
answers
6 views
+10

如何在u啓動x時立即啓動應用程序?

2

我想在Ubuntu啓動x時立即運行GUI應用程序。 我認爲新貴可能會起作用,所以我在/etc/init/ 內創建了一個conf文件,但它似乎無法正常工作。如何在u啓動x時立即啓動應用程序?

myjob.conf

start on startup 
task 
    exec /home/camino/test/qt/guiapp 

有什麼建議?

沙发
0
1

哦,Ubuntu的...

一般大多數發行版都會讓您自己啓動Xorg,而不是讓登錄管理器執行它,例如GDM或KDM。如果從命令行運行startx,它將讀取?/ .xinitrc並加載任何窗口管理器或其他放置在其中的內容。但是,既然你有Ubuntu的....

要之前GDM/KDM啓動運行腳本,你既可以

  1. 自己寫的新貴腳本之前GDM運行;或
  2. 修改您的系統GDM腳本以運行自定義外部腳本(例如,您的/etc/init.d/whereami腳本)作爲其初始任務之一。
  3. 在GDM/KDM運行之前運行您的Xorg應用程序,將腳本放在/etc/init.d/SXYYourScript中,其中XY的編號小於GDM的編號。

另外檢查/ etc/gdm/Init/Default也許是你想要的。

我建議你跟3一起去,因爲它更簡單。

但是,爲什麼要在登錄管理器之前運行任何Xorg應用程序?

板凳
0
0

把它放在任何行之後的?/ .xinitrc

你可以做一個腳本,myblabla.sh然後把在?/ .xinitrc中

+0

謝謝很多安東尼奧對於你的回答,我想我沒有清楚地解釋我的問題。我的意思是我想在任何其他GUI應用程序之前運行我的GUI應用程序,甚至是Ubuntu的登錄窗口。 – camino 2010-10-12 09:52:31

地板
0
0

兩種方案可供選擇:

https://askubuntu.com/questions/107187/how-to-launch-gui-app-with-upstart-script

作爲一個普通桌面應用

http://www.debian-administration.org/articles/50

的東西涉及到X啓動過程

0
votes
answers
6 views
+10

權限被拒絕npm install的錯誤

0

剛剛重新安裝了我的ubuntu,並且安裝了必要的東西,如nodejs npm。如果我克隆項目,並試圖sudo npm install我得到了這個錯誤。有人有同樣的問題?權限被拒絕npm install的錯誤

使用 節點:8.9.3 NPM:5.5.1

fetchPackageMetaData error for [email protected]://github.com/gulpjs/gulp.git#4ed9a4a3275559c73a396eff7e1fde3824951ebb Command failed: /usr/bin/git clone -q git://github.com/gulpjs/gulp.git /home/user_name/.npm/_cacache/tmp/git-clone-0e191fc9 

fetchPackageMetaData /home/user_name/.npm/_cacache/tmp/git-clone-0e191fc9/.git: Permission denied 

Error: Command failed: /usr/bin/git clone -q git://github.com/gulpjs/gulp.git /home/user_name/.npm/_cacache/tmp/git-clone-0e191fc9 

/home/user_name/.npm/_cacache/tmp/git-clone-0e191fc9/.git: Permission denied 
+0

https://stackoverflow.com/questions/31744852/npm-install-giving-error-while-accessing-git-url這個問題可能有幫助。 – evolutionxbox

+0

npm與安裝節點一起安裝...我避免使用sudo ...如果使用sudo安裝節點,則所有npm install命令也必須發出sudo ...如果您在安裝過程中避免使用sudo,請不要使用'sudo npm安裝x' ...安裝沒有sudo可以是原始代碼安裝或編譯安裝...閱讀內嵌評論 https://askubuntu.com/questions/426750/how-can-i-update-my -nodejs到了,最新版本/ 959382#959382 –

沙发
0
0

安裝節點沒有sudo和你不會得到拒絕 「權限錯誤」。

sudo npm install node

使用此命令:

npm install node

0
votes
answers
6 views
+10

通過Ansible安裝nodejs playbook

-1

我創建了一個Vagrant vm(Ubuntu)並安裝了Ansible。我可以ping我的本地主機,這意味着我的虛擬主機。我寫了一本劇本來安裝nodejs。通過Ansible安裝nodejs playbook

--- 
- hosts: node #it contains localhost 
    gather_facts: no 
    tasks: 
    - name: install node.js 
    shell: apt-get install nodejs 
    sudo: yes 

當我運行手冊時,狀態顯示成功。據我的理解,它應該在我的虛擬機中安裝nodejs和npm。但是,如果輸入node -v,則表明它尚未安裝。

[email protected]:/vagrant_data$ ansible-playbook ping.yml 

PLAY [node] ******************************************************************* 

TASK: [install node.js] ******************************************************* 
changed: [localhost] 

PLAY RECAP ******************************************************************** 
localhost     : ok=1 changed=1 unreachable=0 failed=0 

[email protected]:/vagrant_data$ node -v 
The program 'node' can be found in the following packages: 
* node 
* nodejs-legacy 
Ask your administrator to install one of them 

我在做什麼錯在這裏?

沙发
0
3

我在這裏做錯了什麼?

  • 您通過shell模塊執行一個命令,而不是使用天然,冪等Ansible module;

  • 您正在執行apt-get無參數以阻止交互式提示(-y);

  • 您正在使用長期過時的sudo參數(在當前Ansible版本中被忽略)而不是become;

  • 最後,你似乎有閱讀屏幕上的信息和區別包名的問題:期待node.js安裝node可執行文件,而你的系統中明確規定它可以在node或??包被發現。


獎勵:您正在安裝 - 通過一個單獨的進程 - 一組用於設置和使用用戶環境變量的程序,而是繼續使用shell會話,而設置了環境(這並沒有直接影響node可執行可用性,但無論如何都是錯誤的)。