Sunday, 14 November 2010

ADT, PMV... cannot start with ATI catalyst driver



setting PYTHONHOME environment
Run PMV from /home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/Pmv
Resource file used to customize PMV: /home/tk/.mgltools/1.5.4/Pmv/_pmvrc
Traceback (most recent call last):
File "/home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/Pmv/__init__.py", line 371, in runPmv
title=title, withShell= not interactive, verbose=False, gui=gui)
File "/home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/Pmv/moleculeViewer.py", line 315, in __init__
verbose=verbose, trapExceptions=trapExceptions)
File "/home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/ViewerFramework/VF.py", line 345, in __init__
verbose=verbose)
File "/home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/ViewerFramework/VFGUI.py", line 277, in __init__
cnf = {"addScenarioButton": False})
File "/home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/DejaVu/Viewer.py", line 675, in __init__
cp = ClippingPlane(self.rootObject, i, self)
File "/home/tk/Programs/mgltools_i86Linux2_1.5.4/MGLToolsPckgs/DejaVu/Clip.py", line 42, in __init__
self.id = self.clipPlaneNames[num]
IndexError: list index out of range


Fix:

MGLToolsPckgs/DejaVu/Viewer.py


Sunday, 17 May 2009

Beginning with module (cont.)

use Some::Package

will tell Perl to search for module Package in Some/Package.pm

but

@ISA = ("Some::Package")

will not direct Perl correctly to the tree Some/Package.pm

why???? and how to tell Perl that we WANT Some/Package.pm, not Some::Package ???

Beginning with module



All the books and forum about Perl Modules converge in saying this:

when you

use Some::Package;

Perl will look for Package.pm in directory tree ./Some/Package.pm

Sure, but...

The important thing that almost nobody has remembered to refer that, in the Package.pm, the first line must be

package Some::Package;

not

package Package;

if the package is not specified like that, you will undoubtedly receive error message saying that

"can't locate object method via package Some::Package ... perhaps you forgot to load Some::Package at use_some_package.pl line xx"

And here's the example

Sunday, 12 October 2008

Segmentation fault

Quoted from wikipedia:

A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. A segmentation fault occurs when a program attempts to access a memory location that it is not allowed to access, or attempts to access a memory location in a way that is not allowed (for example, attempting to write to a read-only location, or to overwrite part of the operating system). Systems based on processors like the Motorola 68000 tend to refer to these events as address or bus errors.

Segmentation is one approach to memory management and protection in the operating system. It has been superseded by paging for most purposes, but much of the terminology of segmentation is still used, "segmentation fault" being an example. Some operating systems still have segmentation at some logical level although paging is used as the main memory management policy.

On Unix-like operating systems, a process that accesses invalid memory receives the SIGSEGV signal. On Microsoft Windows, a process that accesses invalid memory receives the STATUS_ACCESS_VIOLATION exception, and usually a window asking the user to send an error report to Microsoft appears.

------------

Well, worth learning huh?

That's the error I got when running Matt to align 3 pdb structures. Omg, how can I fix such a mass of c library without no knowledge about the language? Hehe, the final way is nothing other than emailing the author. OMG, I' ve just remember that the author was not at the same institute when he wrote this any longer. OMG, then... what to do next???

Tuesday, 12 August 2008

Linux loadable kernel modules (LKM)

15. Giới thiệu các modules

15.1 Trình phiên dịch thi hành (Executable interpreters)

Bạn phải có ít nhất một trình phiên dịch thi hành gắn vào kernel cơ sở, vì để load một LKM phiên dịch thi hành (executable interpreter LKM), bạn cần phải thực thi một lệnh, và do đó, cần có chương trình để phiên dịch lệnh thực thi này.

Trình này gần như hiển nhiên là ELF, vì hầu hết các lệnh thực thi trong hệ thống Linux là ELF.

Trước khi ELF tồn tại trên Linux, dạng lệnh thực thi thông thường là a.out. Có một thời gian ngắn, các hệ thống nửa-ELF/nửa-a.out khá thông dụng. Một số vẫn còn tồn tại.

15.1.1. binfmt_aout: EI cho dạng a.out

a.out là định dạng thực thi phổ biến trong những ngày đầu của Linux và từng là định dạng duy nhất của Linux. Cho đến ngày nau, tên mặc định của các file xuất thực thi của một trình biên dịch GNU (GNU compiler) là a.out (bất kể chúng có định dạng gì).

Nếu bạn thử chạy một file thực thi a.out mà không cần EI, lệnh hệ thống exec sẽ không thực hiện được và báo lỗi "cannot execute binary file".

Không có tham số LKM

Ví dụ:


modprobe binfmt_aout


15.1.2 binfmt_elf: EI cho định dạng ELF

ELF là định dạng thực thi thông thường trên các hệ thống Linux.

Gần như không thể nào không có EI này trong kernel cơ sở của bạn (nếu không còn lý do nào khác thì: insmod là một file thực thi dạng ELF!). Tuy nhiên, về lý thuyết, có thể bỏ nó ra khỏi kernel cơ sở và đưa nó vào như một LKM.

Không có tham số LKM.

VD:

modeprobe binfmt_elf

15.1.3 binfmt_java: EI cho Java bytecode

Java là một ngôn ngữ lập trình hướng đối tượng khá hiện đại. Những chương trình Java truyền thống được biên dịch thành các "Java bytecode", nghĩa là cần phiên dịch bởi một trình phiên dịch Java bytecode. Điếm quan trọng đối với ngôn ngữ hướng đối tượng mới này là các file đối tượng hoàn toàn linh động: chúng có thể được chạy trên mọi hệ thống, miễn là hệ thống đó có một trình phiên dịch bytecode.

Trong khi dự tính ban đầu là trình phiên dịch bytecode sẽ chạy như một chương trình người dùng, với LKM này, bạn có thể làm cho kernel linux phiên dịch file thực thi Java như bất kỳ một file thực thi nào khác. Và vì vậy, bạn có thể chạy một chương trình biên dịch từ Java cũng như chương trình biên dịch từ C, tức là gõ tên chương trình tại dấu đợi lệnh của giao diện dòng lệnh.

Thực tế, lợi ích của ngôn ngữ bytecode trung gian vẫn chưa được chứng minh. Và thường, Java được biên dịch hẳn thành một file thực thi truyền thống như ELF. Nếu làm như vậy, bạn sẽ không cần tới binfmt_java.

Không có tham số LKM.

VD:
modeprobe binfmt_java

15.2. Block device drivers

15.2.1. floppy: floppy disk driver

Đây là driver thiết bị cho ổ đĩa mềm. Bạn sẽ cần đến driver này để có thể truy xauất một đĩa mềm. Tài liệu về LKM này được ghi trong README.fd đặt trong linux/drivers/block directory.

Lưu ý rằng nếu bạn boot từ đĩa mềm hay có hệ thống file root trên một đĩa mềm, bạn phải đưa driver này vào kernel cơ sở.

[ ... ]

15.2.2 loop: loop device driver

Module này cho phép bạn tổ chức một filesystem được lưu trữ dưới dạng file thông thường (trong một filesystem khác). File này được gọi là backing file.

Một ứng dụng của việc này là kiểm tra một filesystem ISO 9660 trước khi ghi chính thức lên một CD. Bạn xây dựng một filesystem trong một file thông thường 650MB. File này sẽ được đưa vào một chương trình ghi đĩa CD. Nhưng bạn có thể định nghĩa một loopback device dựatre6n file này như một backing file và sau đó tổ chức filesytem từ backing file.

Bạn cũng có thể dùng loop device để chuyển các tập hợp file qua một hệ thống mạng. Nó giống như một file .tar, chí khác là bạn không cần phải gói và mở gói. Bạn chỉ cần tổ chức lại file nguyên thủy.

Một số người dùng các loop device trên một hệ thống khi thì chạy WIndows, khi thì chạy Linux, để có thể duy trì hệ thống Linux thông qua hệ thống Windows: đặt một root filesystem vào một file trong hệ FAT để windows có thể truy xuất, sau đó tổ chức hệ thống Linux thông qua một loop device khi Linux đang chạy.

Bạn có thể giữ filesystem mã hóa hoặc nén, hoặc bất cứ cách biến đổi nào, trong một backing file. Loop device mã hóa khi bạn ghi vào, và giãi mã khi bạn truy xuất. Một chiến lược khác khá phổ biến để mã hóa và nén một filesystem là sử dụng một định dạng filesystem đã nén hoặc mã hóa, chẳng hạn như Cfs, Tcfs, Stegfs.

Một hệ thống mã hóa được dựa trên một hàm chuyển (transfer function). Có hai hàm chuyển sẵn có trong một loop module: identify (dùng cho trường hợp mã hóa thông thường: những gì bạn thấy trong loop device chính xác là những gì có trong backing file) và hàm mã hóa XOR đơn giản. Một module độc lập khác có thể bổ sung vào bất kỳ chức năng chuyển nào bằng cách gọi hàm loop_register_transfer() trong loop module.

Tuesday, 5 August 2008

Linux loadable kernel modules (LKM)

4. Công cụ LKM

Chương trình cần để load, unload và thực hiện các tác vụ khác với LKM nằm trong gói modutils. Bạn có thể tìm thấy gói này trong thư mục modutils tại đây

Gói này chứa những chương trình sau giúp bạn sử dụng LKM:

insmod gắn một LKM vào kernel
rmmod gỡ một LKM khỏi kernel
depmod xác định sự phụ thuộc lẫn nhau giữa các LKM
kerneld chương trình kernel daemon
ksyms thể hiện các symbol được kernel xuất ra để các LKM mới sử dụng
lsmod liệt kê các LKM đang được load
modinfo thể hiện nội dung của phần .modinfo trong file object LKM
modprobe gắn hoặc gỡ một LKM hay một bộ các LKM một cách thông minh. Ví dụ, nếu bạn phải load A trước khi load B, modprobe sẽ tự động load A rồi mới load B.

Thay đổi trên kernel thường yêu cầu kèm theo thay đổi trên modutils, vì vậy hãy chắc chắn bạn đang sử dụng phiên bản mới nhất của modutils khi bạn nâng cấp kernel. modutils luôn luôn tương thích ngược (hoạt động với các kernel cũ hơn).

Cảnh báo: modprobe sẽ khởi động insmod với vị trí cố định trong code là /sbin/insmod. Có thể có những PATH không được modutils sử dụng để tìm kiếm chương trình. Vì vậy hãy chỉnh sửa code của modutils trước khi bạn xây dựng, hoặc bảo đảm bạn sẽ cài đặt chương trình vào các thư mục truyền thống.

Linux loadable kernel modules (LKM)

vietnamized and note-taking version of Linux Loadable Kernel Module HOWTO

3.Tạo LKM


Một LKM nằm trong một file đối tượng ELF (thường được đặt tên theo dạng serial.o) Thông thường bạn lưu tất cả file object LKM trong một thư mục nhất định (gần file image của kernel cơ sở). Khi dùng chương trình insmod để chèn một LKM vào kernel, bạn cần đưa vào tên của file đối tượng đó.

Đối với các LKM là một phần của linux, bạn xây dựng chúng cùng lúc với việc tạo image của kernel cơ sở. Đọc file README trong cây thư mục chứa source Linux. Ngắn gọn, sau khi tạo image cho kernel cơ sở với một lệnh (chẳng hạn như make zImage, bạn sẽ tạo tiếp tất cả các LKM với lệnh

make modules

Lệnh này sẽ cho ra một loạt các file đối tượng LKM *.o trong cây thư mục chứa source Linux. (Trong những phiên bản cũ của Linux, sẽ có link trong thư mục modules trỏ đến tất cả các file này. Những LKM này đã sẵn sàng để được load, nhưng có thể bạn sẽ muốn cài đặt chúng trong những thư mục thích hợp hơn.

Một trong những công việc cần làm để cấu hình kernel (lúc xây dựng) là chọn những phần nào của kernel để đưa vào kernel cơ sở và những phần nào để tạo LKM độc lập. Trong quá trình cấu hình cơ bản theo dạng hỏi-trả lời ( make config ), với mỗi phần tuỳ chọn của kernel, bạn sẽ được chọn Y - để tích hợp vào kernel cơ sở, hay M - để tạo module độc lập, hay N - bỏ qua hoàn toàn. Những cách cấu hình khác cũng tương tự.

Như đã giải thích trong phần 2.3, bạn chỉ nên đưa vào kernel cơ sở những phần tối thiểu, và bỏ qua những phần chắn chắn là bạn không cần tới. Không mất mát gì nhiều nếu bạn tạo một LKM mà bạn không dùng tới. Chỉ là một ít thời gian biên tập (compile), một ít không gian lưu trữ, và khả năng lỗi trong module đó làm cản trở quá trình xây dựng kernel.

Cũng trong bước cấu hình, bạn phải chọn có sử dụng symbol versioning hay không. Lựa chọn này ảnh hường đến cả việc xây dựng kernle cơ sở lẫn LKM, và bạn nhất thiết phải chọn đúng. (Xem phần 6).