日志
2023.9.7: 完成剑指 Offer 67. 把字符串转换成整数 纯粹浪费我时间,题解都用long long存,自己骗自己呢 明天记得看一看自动机
linux板:
目前已经确认应该是启动选项飞到了网络启动导致的vfs启动
但是依旧解决不了nfs不能访问的问题。很明显问题已经轻松解决,因为uboot的nfs是V2u-boot NFS下载文件报错:Loading: ** ERROR: File lookup fail解决方法_uboot nfs loading:-CSDN博客 搞好之后第二遍确认他bootz后采用的是网络启动,应该是就是这句
netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp'
已经初步用busybox构建好一些小软件
启动3件套
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb
tftp 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 - 830000002023.9.8:
- 创建/etc/fstab挂载需要的分区
- 创建/etc/init.d/rcS 文件启动一些服务
- 创建/etc/inittab
- 编写字符驱动笔记
哥们要准备去考研了呜呜
2023.9.9:
遇到了强有力的问题,驱动加载不进去
/lib/modules/4.1.15-g3dc0a4b # insmod led.ko
[ 2497.242677] led init!
[ 2497.245488] do_init_module: 'led'->init suspiciously returned 10, it should follow 0/-E convention
[ 2497.245488] do_init_module: loading module anyway...
[ 2497.259916] CPU: 0 PID: 160 Comm: insmod Tainted: G O 4.1.15-g3dc0a4b #1
[ 2497.267870] Hardware name: Freescale i.MX6 Ultralite (Device Tree)
[ 2497.274249] [<80015d78>] (unwind_backtrace) from [<8001271c>] (show_stack+0x10/0x14)
[ 2497.282017] [<8001271c>] (show_stack) from [<808237e8>] (dump_stack+0x84/0xc4)
[ 2497.289314] [<808237e8>] (dump_stack) from [<8082199c>] (do_init_module+0x88/0x1a8)
[ 2497.297023] [<8082199c>] (do_init_module) from [<800964d4>] (load_module+0x1ba8/0x1e50)
[ 2497.305072] [<800964d4>] (load_module) from [<80096938>] (SyS_finit_module+0x80/0x90)
[ 2497.312921] [<80096938>] (SyS_finit_module) from [<8000f480>] (ret_fast_syscall+0x0/0x3c)她可以跑到我init的最后一句,
mknod /dev/led c 200 0
创建节点后,读写/dev/led是失败的,有/dev/led这个文件 但是cat /proc/devices并没有这个设备。 哦原来是我没注册,我就说怎么找不到呢哈哈哈
2023.9.10: 写完新字符驱动了,感觉理解还不是很到位
2023.9.11: 帮帮taffy吧,剑指 Offer 35. 复杂链表的复制 - 力扣(LeetCode)怎么做不出来呐呜呜
Node* copyRandomList(Node* head) {
if(head== nullptr)return nullptr;
Node *NewHead = new Node(head->val);
NewHead->random = head->random;
Node *tep = NewHead;
unordered_map<Node *, Node *> map;
map[head] = NewHead;
while (head->next != nullptr) {
map[head->next] = NewHead->next;
//deep copy
NewHead->next = new Node(head->next->val);
NewHead->next->random = head->next->random;
//next head
head = head->next;
NewHead = NewHead->next;
}
NewHead = tep;
while (NewHead->next != nullptr) {
//random指的还是以前的ptr,通过以前的ptr找到new
NewHead->random=map[NewHead->random];
NewHead = NewHead->next;
}
return tep;
}这个问题,我的评价是留给以后的我吧,问题在random的处理上,链式处理感觉出问题了。
Node* copyRandomList(Node* head) {
if (head == nullptr) return nullptr;
unordered_map<Node*, Node*> map; // 原始节点到复制节点的映射
Node* current = head;
// 第一次遍历:创建新节点并建立映射
while (current != nullptr) {
map[current] = new Node(current->val);
current = current->next;
}
current = head;
// 第二次遍历:设置新节点的next和random指针
while (current != nullptr) {
map[current]->next = map[current->next]; // 设置新节点的next
map[current]->random = map[current->random]; // 设置新节点的random
current = current->next;
}
return map[head]; // 返回复制链表的头节点
}这个挺厉害的,建立映射还以为是链式的映射,没想到是每个旧节点和新节点的映射,最后通过映射将新节点串联起来,吊!
linux板:
受不了一点,你能不能直接说这个板子移植完之后设备树的LCD部分驱动不了?
别欺负我没看网课啊,倒腾了2小时,还以为我移植过程有问题,看了看教程也没说,evk的dtb也是这样,估计cv过去没改好设备树 在后面几章才说... 当然这是大的那块显示屏,我们找到4.3寸的参数套上去,编译
make dtbs
,将dtb导入就正常驱动lcd了2023.9.12: 剑指 Offer 18. 删除链表的节点 - 力扣(LeetCode)搞了点简单题
ListNode* deleteNode(ListNode* head, int val) {
if(head== nullptr)return nullptr;
if(head->val==val)return head->next;
ListNode *left=head;
while (left->next != nullptr) {
if (left->next->val == val) {
if(left->next->next== nullptr) {
left->next = nullptr;
}
else{
left->next = left->next->next;
}
return head;
}
left = left->next;
}
return head;
}没有用双指针,但是双指针能更好地规避一些问题,比如头节点就是val、尾结点是val要置空 可以看出来双指针能更简洁
2023.9.14:哥们12号分手了,心情有点不是很好,不是很想写日志了先。
不过记到设备树了。
2023.9.19:pinctrl部分有点小难?主要是很绕
没懂那个cell代表什么极性
2023.9.22:今日有老板把我之前的uboot直接写进emmc里了,崩溃
只好重新复活老uboot
EMMC8线驱动
LCD
NET
Net: CPU Net Initialization Failed
No ethernet found.
我也忘了怎么修好的了,重新设置网络环境变量
setenv ipaddr 192.168.123.122
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.123.1
setenv netmask 255.255.255.0
setenv serverip 192.168.123.109
saveenvtftp
在想启动tftp 80800000 zImage的时候顺利爆金币了...
倒腾了一晚上,在CSDN发现了问题所在 IMX6ULL 使用U-Boot Ping命令内核重启uboot使用网络命令导致重启琰婧的博客-CSDN博客
内核panic我也要跟着panic了,谁知道是交叉编译的问题...
但是呢,我觉得换编译器是更加离谱且困难的问题,于是再找找其他方案
设置好uboot网络地址后,ping主机时,uboot重启_沙漠那点绿的博客-CSDN博客
尼玛是内存对齐的问题
翻到CP15的技术文档,首先是将SCTLR的寄存器读到了r0进行修改
mrc p15, 0, r0, c1, c0, 0
cpn=c1,cpm=c0focus on the second bit
orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align
orr r0, r0, #0x00000800 @ set bit 11 (Z---) BTB源代码是这位爷设1对吧,这确实是内存对齐检测的问题
其实可以讲通了,新版的编译器可能在内存越界/犯法问题,启动内存检测后导致非法,MMU强制重启系统
把这玩意关了也不是不行?可能会爆点金币,但是过渡到Linux kernel启动后感觉没事的话也不是不行
当然这是我这种不专业的外行人看法,欢迎大佬指正━(`∀´)ノ亻!
最后要从网路启动需要设置bootargs
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.123.109:/home/pansy/linux/nfs/rootfs,proto=tcp rw ip=192.168.123.122:192.168.123.109:192.168.123.1:255.255.255.0::eth0:off' //设置 bootargs
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.123.109:/home/pansy/linux/nfs/rootfs,proto=tcp rw ip=192.168.123.122:192.168.123.109:192.168.123.1:255.255.255.0::eth0:off'
life is bullshit , but you have no choice and have to move on.
2023.9.23: 今儿总算是启动了,bootargs设置了一百年..
很逆天的是,我printenv后有两个bootargs,有时候直接复制的命令是直接不能用的
严重怀疑是串口终端有问题,secureRT要注册就没用...
ok,成功电亮pinctrl和gpio子系统
2023.9.26:
前几天写了一堆锁的例程,atomic、mutex、semaphore、spainlock
写了gpio用原子锁的
今天把按键的也写了
然后学习定时器
2023.10.6:
突然发现好久没有更新了,Linux小断了一段时间,最近在做JSp+servlet+mybatis这坨泄
2023.10.11:
a sort of vulnability , sensitive
我发现,如果你陷入一种内耗之中(比如感情
可以尝试用英语去表达这种内耗,然后你就会陷入一种无语之中,因为你不知如何表达,那就算了
实在不行就去做几套英语真题,30%正确率做到你自闭
还想什么女人?
vulnability
2023.10.31:
很久不更新系列 )D
最近接了一单大的,就是一个智能音箱
base on android,感觉要讲的话就是长篇大论了
感觉踩雷的东西挺多的