-a Automatically repair the file system. No user intervention is
necessary. Whenever there is more than one method to solve a
problem, the least destructive approach is used.
-A Use Atari variation of the MS-DOS filesystem. This is default if
dosfsck is run on an Atari, then this option turns off Atari
format. There are some minor differences in Atari format: Some
boot sector fields are interpreted slightly different, and the
special FAT entries for end-of-file and bad cluster can be dif-
ferent. Under MS-DOS 0xfff8 is used for EOF and Atari employs
0xffff by default, but both systems recognize all values from
0xfff8...0xffff as end-of-file. MS-DOS uses only 0xfff7 for bad
clusters, where on Atari values 0xfff0...0xfff7 are for this
purpose (but the standard value is still 0xfff7).
-d Drop the specified file. If more that one file with that name
exists, the first one is dropped.
-f Salvage unused cluster chains to files. By default, unused clus-
ters are added to the free disk space except in auto mode (-a).
-l List path names of files being processed.
-r Interactively repair the file system. The user is asked for
advice whenever there is more than one approach to fix an incon-
sistency. This is the default behaviour.
-t Mark unreadable clusters as bad.
-u Try to undelete the specified file. dosfsck tries to allocate a
chain of contiguous unallocated clusters beginning with the
start cluster of the undeleted file.
-v Verbose mode. Generates slightly more output.
-V Perform a verification pass. The file system check is repeated
after the first run. The second pass should never report any
fixable errors. It may take considerably longer than the first
pass, because the first pass may have generated long list of
modifications that have to be scanned for each disk read.
-w Write changes to disk immediately.
-y Same as -a (automatically repair filesystem) for compatibility
with other fsck tools.
If -a and -r are absent, the file system is only checked, but not
repaired.
이 있는데 해당 옵션을 체크했을 때 make menuconfig 결과에 따라 모듈이나 빌트인으로 알아서 컴파일 된다.
- 예제
- hello.c code
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/version.h>
int __init module_builtin(void)
{
printk(KERN_ALERT "hello_this is module built-in test!");
return 0;
}
void __exit exit_module_builtin(void)
{
printk(KERN_ALERT "Good bye");
}
module_init(module_builtin);
module_exit(exit_module_builtin);
MODULE_LICENSE("GPL");
- Makefile
obj-y += hello.o
- hello 파일 내부(cd linux/driver/hello) linux폴더-driver폴더 내 hello 폴더 생성
- Makefile 수정
- vi linux/driver/Makefile //리눅스 폴더 내 드라이버의 Makefile을 수정하는 것이다.
마지막에 obj-y += hello/ 를 적어준당
리눅스 폴더에 가서(cd ../../)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig 실행
(*여기에서 arm-linux-gnueabihf-bcm2709_defconfig의 위치는 각자 설정해주어야 된다)
(본인의 경우 make ARCH=arm CROSS_COMPILE=/home/kkn/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcm2709_defconfig가 경로이다)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
- 대부분의 사용자들은 PC라는 동일한 환경에서 프로그램을 작성 및 컴파일하고 동일한 환경에서 실행한다. 이 때 컴파일을 네이티브컴파일이라 하고
PC 환경에서 라즈베리용 모듈을 컴파일하여라즈베리 환경에서 실행. 즉 컴파일은 PC에서 하였고 실행은 라즈베리 파이 환경에서 하는데 이렇게 동작하는 환경과 시스템이 다를 때 이 컴파일을 크로스 컴파일이라고 함
1. 라즈베리 파이 커널 소스 다운로드
$ git clone --depth=1 https://github.com/raspberrypi/linux //depth의 경우 히스토리는 복제하지 않기 때문에 빠름
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
bcm2709_defconfig
-2번째 줄의 경우 라즈베리파이2는 kernel7이다. 라즈베리파이2의 boot partition에는 kernel도 있고 kernel7도 있으니 혼동 주의
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
modules dtbs
-Note: To speed up compilation on
multiprocessor systems, and get some improvement on single processor ones,use -j
n where n is number of processors * 1.5. Alternatively, feel free to
experiment and see what works
4. SD card에 직접 설치
-리눅스머신에서$lsblk을 입력할 경우(SD card input) sdb1,2가 나오는 것을 확인할 수 있다.(NOOBS의 경우 최소 5개)이 때, 1은 FAT partion, 2는 ext4 partion이다.
-mount
$ mkdir mnt/fat32
$ mkdir mnt/ext4
$ sudo mount /dev/sdb1 mnt/fat32
$ sudo mount /dev/sdb2 mnt/ext4
-모듈설치
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
INSTALL_MOD_PATH=mnt/ext4 modules_install
*arm-linux-gnueabihf는 앞 장의 컴파일러 path, INSTALL_MOD_PATH는 설치할 path 경로
- kernel image(mkknlimg스크립트로 변환 필요), dtb(device tree blob) 복사
- A standalone .img
file is a complete byte-for-byte image of an entire SD card. It includes the MBR (which stores
the partition table) as well as all the raw partitions.This is the lowest-level possible way
of writing an SD card, but it's the only way to access multiple partitions on an SD card using Windows (via the Win32DiskImager software).
-Raspbian이미지를 설치하면 2개의 파티션 boot(fat)와 file system(ext4)로 나뉘게 됨
-Boot(fat, sdb1) – boot partion으로 라즈베리파이펌웨어와컴파일드 된 리눅스커널과 몇 개의 config파일을 가짐
-File system(ext4,
sdb2)- root partition으로 application과 home directory등 리눅스에서 사용되는 파일들을 포함
-SD카드에 직접 이미지를 복사하게 때문에 큰 용량의 SD카드의 경우 지정된 용량의 공간을 할당하게 된다. 그렇기 때문에 앞서 설명했듯이, raspi-config에서 1. Expand_FileSystem으로최적화 시켜야 됨
§Standalone booting
-라즈베리파이는 bootstrap code를 사용하지 않음
1.Boot partition에 있는 bootcode.bin을 load
2.Run start.elf(and fixup.dat)
3.Config.txt 파일을 읽고 GPU configuration을 set up
4.Cmdline.txt(ext4 읽으라는 내용 포함 되어 있음)파일을 읽고 kernel.img 파일을 실행