durian

Results 17 comments of durian

我又测试可下,我在dnsmasq的自定义配置中加入了server=/www.google.com/8.8.8.8~53 这样的配置(这是我现在手写的,我实验的时候配置一定是正确的,不然服务都起不起来的,加了no-resov的),然后nslookup谷歌,发现dnsmasq就直接重启了😂

今天试了下,是可行的 关键点在于 让dnsmasq 只运行dhcp服务,不运行dns服务 直接 port=0 就ok了 然后启动smartdns做 dns服务 遇到的坑: 1. 有些dns会把某些域名解析到127.0.0.1, 比如武汉电信的dns 会把github.io解析到127.0.0.1, 在smartdns里面加配置bogus-nxdomain 127.0.0.1/16 就可以把127.0.0.1给屏蔽掉了,解析到其他ip也一样加上就好 2. anti-ad 广告规则 会把activity.windows.com给屏蔽掉,导致edge浏览器云端同步不了,这个直接写脚本删除掉这条就好了,反正都是要写更新脚本的 3. smartdns 的 address /xxxx/# 这种配置覆盖不了,我一开始没想写脚本删除activity.windows.com的规则的,一开始是想覆盖,但实验了很多情况,发现覆盖不了。 4. 加上了 force-AAAA-SOA...

SS Gfw 模式更新(在做了smartdns替换dnsmasq之后) 此方法不重新编译固件(要重启路由器配置还在的话,请把所有自定义的配置全部放在/etc/storage下面) 前提:ss 必须处于chnroute模式(主要是全局模式没试过,但只要iptables 规则没改,按下面的来也没问题) 1. 下载 [smartdns gfw ipset文件](https://raw.githubusercontent.com/dunmengjun/SmartDNS-GFWList/master/smartdns_gfw_ipset.conf)并配置到smartdns中,重启 smartdns. 2. 手动运行iptables的命令删除 SS_SPEC_WAN_AC里面最后一个SS_SPEC_WAN_FW规则,就是没有加match-set规则的那个,然后把该命令加到路由器启动后执行的脚本里面(ui界面 参数设置->脚本) (后悔了也可以,直接删除掉命令,重启ss即可) 这样配置就是所有gfwlist中的域名走ss了,不是其中的走本地。 如果需要gfwlist dns请求走不同的dns服务器 参考 [SmartDNS-GFWList](https://github.com/dunmengjun/SmartDNS-GFWList)项目

它的镜像仓库里面的 metrics-server 的镜像看着是-arm64结尾的,但不是真的支持arm64, 你自己docker inspect下就可以看到支不支持arm了,自己去网上找个arm64的镜像去吧😂

@wyfcyx 我有个很困惑的点是为啥我们要在应用程序的链接文件中设置0x80400000地址呢?之后在内核程序中我们是自己写代码手动去把应用程序从数据段copy到以 0x80400000 开头的位置的啊,按很自然的理解来说,copy之后只要把指令寄存器指向0x80400000,做一些初始化工作就应该可以运行了啊。我不明白的是为啥应用程序的链接文件中要指定0x80400000地址,明明内核中就手动copy到了这个地址,看起来这个设定没什么用啊,但不设定又会报错。 按我自己的理解,我不在应用程序链接文件中设置BASE_ADDRESS,我只要保证应用程序入口点_start 的第一条指令在生成的bin文件的最前面,当我内核手动写代码copy 这个应用程序bin文件到0x80400000之后就应该能运行 不知道我理解是有什么问题? 为什么我们在应用程序链接文件中不设置0x80400000会报错? 还有内核程序加载到内存我也一样很不理解为啥要在链接文件中设置BASE_ADDRESS, 因为我们的qemu命令中已经设置了啊,很困惑

@wyfcyx 我理解了,谢谢您,您解释的很清晰。 还有一个很小的问题是,为什么二进制文件会有这样的设计呢?为什么需要绝对地址,是有什么case需要这样做吗? 有这个问题是因为我其实没太理解在程序加载这样的场景中,绝对地址有啥好处。感觉我自己这方面的知识有点缺乏了,您有没有什么推荐的文档给我读读?有中文最好,英文也可。 再次感谢您😊 后记:我在后面的章节中看到了解释 https://nju-projectn.github.io/ics-pa-gitbook/ics2020/4.2.html, 谢谢

在本章最后运行 qemu-riscv64 02power 进行用户程序测试的时候,如果用源码库里面ch2分支的代码。我运行的时候出现了奇怪的错误段错误,print 10以上的数就会出现。后来发现原因是ch2分支代码默认是用的自己的内存布局,并且把起始地址改成了0x80040000,但qemu-riscv64 是半模拟的,意味着它提供了完整的底层操作系统,所以在qemu-riscv64上测试我们的应用程序应该把 我们自己的内存布局删除掉, 就是在.cargo/config文件中注释掉内存布局相关代码 ``` [build] target = "riscv64gc-unknown-none-elf" #[target.riscv64gc-unknown-none-elf] #rustflags = [ # "-Clink-args=-Tsrc/linker.ld", #] ``` 然后程序中注释掉 clean_bss相关代码,就可以运行了 不知道我理解的对不对?,还有没有其他可以兼容qemu-riscv64和qemu-system-riscv64而不改代码的方式? 顺便说一句,我没有用Makefile文件,我是直接 cargo build, 然后用的是debug里面的文件,不知道和这有没有关系?

还有在rust 1.55中 asm! 宏现在可以用了,而且llvm_asm! 宏是已经被标记删除的状态了,不知道下面哪个版本就会直接删除了。所以之后的版本还是推荐用asm!宏 下面是asm!宏的sbi call的代码 ```rust fn sbi_call(id:usize, args: [usize; 3]) -> usize { let mut ret = 0; unsafe { asm!("ecall", inlateout("x10") args[0] => ret, in("x11") args[1],...

let mut ret 不需要初始化

@wyfcyx 我这边是只要用了自己的内存布局,就是不注释那段linker的rustflag代码,cargo build, 然后运行 ```sh qemu-riscv64 02power ``` 就会报 ``` 3^Segmentation fault ``` 的错误 你可以看到前面3^这些字符串都打出来了,然后就是u32的数字没打出来,我测试了一下,超过10就会出现段错误😂 我的环境是 windows10 wsl2 ubuntu18.04, qemu-riscv64 5.0.0, rustc 1.55.0-nightly (2f391da2e 2021-07-14), cargo 1.55.0-nightly (3ebb5f15a 2021-07-02) 就在写这一段的时候,我又测试了一下,我这次直接clone你们代码库的代码,然后cargo...