第四期訓練營-rust for linux 作業

LIalan發表於2024-07-17

作業1

make x86_64_defconfig
make LLVM=1 menuconfig

報錯,解決 sudo apt install lld

配置介面:

接下來編譯

make LLVM=1 -j 12 

作業2

問題1:
在Kconfig中有相關的配置,具體在:

obj-m := r4l_e1000_demo.o

由於是obj-m 所以會按照模組編譯

問題2:
透過insmod,可以將out-of-tree 的module掛載到核心中驅動的管理連結串列中,就和直接掛載的驅動沒有大的區別,可以直接訪問核心空間。

禁用C的e1000網路卡

掛載e1000網路卡,並setup

insmod r4l_e1000_demo.ko
ip link set eth0 up

ifconfig eth0 broadcast 10.0.2.255

ip addr add 10.0.2.15/255.255.255.0 dev eth0

ip route add default via 10.0.2.1

ping 10.0.2.2

作業3

編譯後將ko檔案放到rootfs下,啟動qemu後用insmod掛載就會有下面的輸出

作業4

作業5

得到cicv的主次裝置號

ls /dev/cicv -al

可以看到是248 0

build_image.sh 指令碼中也有對應掛載的語句

/proc/devices中配置將248分配給rust_chrdev

在module!中以後對應的name欄位,從而將248分配給了rust_chrdev

修改部分

結果:

測驗

mount -t nfs -o nolock host_machine:/home/alan/Project/Rust/OS-4/cicv-r4l-3-lliYanze/r4l_experiment/driver /mnt

按照文件操作後,最終實現

先用最簡單的驅動測試

相關文章