You are on page 1of 3

1) Biên dịch file .

c với lệnh make mà xảy ra lỗi “Nothing to be done for” all”
Tức là Makefile có vấn đề. Trong Makefile phím TAB là 1 cú pháp bắt buộc và có ý
nghĩa. Sau chỉ thị all: hoặc clean: thì trước lệnh phải có 1 dấu TAB

2) Cài driver vào kernel thì xảy ra lỗi “Operation not permitted”
Do chưa dùng quyền cao nhất( root) để thực hiện lệnh insmod, thay đổi lại câu
lệnh với từ khóa sudo đứng trước, ví dụ:
sudo insmod hello_kernel_module.ko

3) Nếu khi thực hiện Makefile gặp lỗi “unknown field ‘ioctl’ specified in initializer”:
In newer kernels, the preferred way is to use .unlocked_ioctl or .compat_ioctl
fields. The plain .ioctl was removed from struct file_operations. This discussion
may clarify what happened and how to deal with that.

4) Nếu đang ở bản Ubuntu có nhân kernel cao hơn thì vẫn có thể biên dịch file
driver với kernel bất kì nào khác theo các bước sau:
Download nhân : Ví dụ
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2
Giải nén
tar xvjf linux-2.6.24.tar.bz2
cd linux-2.6.24
Download và thực hiện vá nhân :
wget http://maxim.org.za/AT91RM9200/2.6/2.6.24-at91.patch.gz
zcat 2.6.24-at91.patch.gz | patch -p1
wget ftp://www.linux4sam.org/pub/linux/2.6.24-at91-exp.patch.gz
zcat 2.6.24-at91-exp.patch.gz | patch -p1
Sau đó tiến hành cài đặt và biên dịch nhân, lần lượt thực hiện các lệnh:
make oldconfig
make module
Cuối cùng là chỉnh sửa đường dẫn trong Makefile tương ứng với thư mục của
nhân kernel vừa giải nén, ví dụ như sau:

obj-m += helloworld_dev.o
all:
make -C /home/thinhpn/Desktop/linux-2.6.24 M=$(PWD) modules
clean:
make -C /home/thinhpn/Desktop/linux-2.6.24 M=$(PWD) clean
Sau đó di chuyển tới thư mục chưa file driver để biên dịch bằng make bình thường.
5) Một cách đơn giản để chuyển sang tài khoản root trên ubuntu là sử dụng lệnh:
sudo –i
Sau đó thì type passworld
6) Đường dẫn tới thư viện của Ubuntu
/usr/src/linux-headers-2.6.24-26-generic(với ubuntu 8.04)
7) Copy file vào filesystem(thay đổi thư viện)
Use sudo nautilus then copy and paste files anywhere.
8) Để biên dịch 1 file Helloworld.c bằng trình biên dịch chéo ta dùng cú pháp:
arm-linux-gnueabi-gcc Helloworld.c -o Helloworld
Nếu trước đó chưa cài đặt trình biên dịch arm-linux-gnueabi-gcc thì thực hiện cài
đặt bằng lệnh:
sudo apt-get install gcc-arm-linux-gueabi
9) Để cài đặt kernel cho KM9260 ta tiến hành các bước:
Chuẩn bị các gói source cho việc build và cài đặt
Toolchains : gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2
Kernel : linux-2.6.30.tar.bz2
Patch file : linux-2.6.30-km9260-19032011.patch.gz
Rootfs : buildroot-km9260-19032011.tar.bz2
Build kernel
1> Cài đặt toolchains mới (gcc-4.4.4) sau đó setup biến đường dẫn PATH cho phù
hợp. Chú ý : toolchain cũ 2007q3 có thể build được kernel, tuy nhiên trong quá
trình boot Linux kernel sẽ bị dump, vì thế chúng ta phải sử dụng toolchains mới
như trên.

2> Tiến hành patch và cấu hình kernel:

$ tar -jxvf linux-2.6.30.tar.bz2
$ cd linux-2.6.30
$ zcat ../linux-2.6.30-km9260-19032011.patch.gz | patch -p1
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- km9260_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage
Toolchains have a loose name convention like arch[-vendor][-os]-abi.
 arch is for architecture: arm, mips, x86, i686...
 vendor is tool chain supplier: apple,
 os is for operating system: linux, none (bare metal)
 abi is for application binary interface convention: eabi, gnueabi, gnueabihf
For your question, arm-none-linux-gnueabi and arm-linux-gnueabi is same thing. arm-linux-
gcc is actually binary for gcc which produces objects for ARM architecture to be run on Linux
with default configuration (abi) provided by toolchain.
10) Network is unreachable
Run tow command
ifconfig eth0 inet 192.168.1.1
sudo dhclient eth0