Welcome to my blog.
Creating BSP part 2: Kernel, device tree, & user space
What’s this blog about? This blog is part 2 of creating a BSP for Nanopi Neo H3 board. Now that u-boot has been installed, all that remains is to prepare the kernel, device tree blob, and the user space. Also, since the concepts are pretty straight-forward, this blog is written more like a “how-to” tutorial than a “conceptual” blog. So if you’re not into these kind of things, you’ve been warned :) ...
Creating BSP part 1: Porting U-Boot
What’s this blog about? A while ago, I made an attempt to re-create a BSP for Nanopi Neo H3 by reading some online sources and comparing the differences between mainline & FriendlyElec’s (the board manufacturer) fork. I thought I’d share what I’ve learned, and specifically for this blog, I’ll be sharing my experience porting U-boot, the bootloader. In this blog, although the main focus is Nanopi Neo (and therefore Allwinner SoCs), I try to share a more general approach to porting U-boot, unlike my previous blog on adding U-boot to Rpi’s boot sequence. ...
Cross compilers: Compiling codes for ARM SoCs on an x86 workstation
What’s this blog about? It’s holiday and I’m bored. Since embedded development is one of the things I’ve been learning in my free time (also the one with least progress), I thought I’d write a blog about cross compilers, which is very crucial in embedded development. In this blog, I’ll be using gcc and the sample target compilation is Allwinner H3 SoC. Introduction Have you ever wondered how a code can be compiled to run on different devices? Well, we compile the code using different compilers. For example, if we want to compile a C code to run on an Intel machine, you use a compiler that compiles for x86 Instruction Set Architecture (ISA). If you want the same C code to run on newer MacBooks, you need to use a compiler that compiles for the ARM ISA. ...
An overview on Servo web engine
What’s this blog about? It’s Chinese New Year season and I’ve been playing with Servo for a while now; and while I’ve done some contributions to the OSS project, I realized that I haven’t really grasped how it works as a whole. That’s why I decided to learn Servo more, and as usual, I’ll be writing blogs to document what I learned. For this specific blog, I’ll only write about an overview on the subject. The upcoming blogs will dive deeper into Servo as I learn it myself along the way. ...
Implementing text-overflow: ellipsis property on Servo
What’s this blog about? This is an explanation to a PR I submitted on the Servo community to implement basic support for text-overflow: ellipsis property on Servo. Scope & Limitations I would like to emphasize that this PR attempts to add basic support for text-overflow property, not a full-fledged feature. Specifically, some limitations include: This PR only adds support for single-valued text-overflow, so anything involving first value, such as text-overflow: ellipsis ellipsis, is not supported yet. No RTL support. According to the CSS specification, if there isn’t enough space for the ellipsis glyph, then the ellipsis glyph must be clipped. This has not been supported yet. Instead, what will happen is one or more characters (except for the first one) will be clipped to make more room for the ellipsis glyph. the CSS specification also mentioned that if the ellipsis glyph is not available for a particular font, then we should fallback to three dots .... This fallback hasn’t been implemented yet. No support for float yet. I’m not sure how to best explain it now, but this will be elaborated in a later section. Despite this, the code in this PR will be written (at least I’ll attempt it to the best of my ability) in a way that makes it possible for future contributors to extend text-overflow property without significantly changing the logic. ...
DDR3 technical notes (part I: theory)
What’s this blog about? As part of my effort to build my own computer, I’ve been learning about Random Access Memory (RAM) recently, and there’s a lot to learn here! Who knew that there’s more to a RAM than what meets the eye? Anyway, since there’s too many things to learn, I need to record what I learned (much like my learning process with high frequency PCB) so it would be easier for me to review in the future. ...
My high frequency PCB design notes (part I)
What’s this blog about? I spent much of my summer break (while being unemployed) learning PCB design. Specifically, I’ve been following Shawn Hymel’s Kicad tutorials on YouTube and made some simple circuits (Please don’t judge, I know I’m still shit, especially at SMD soldering): Anyway, while my soldering skills definitely needs improvement (or maybe I need to buy a hot air gun instead), I think I’m quite comfortable with Kicad already. Therefore, I began to learn about high frequency PCB design, to know what do I need to keep in mind when designing my own computer, as well as finding out if Kicad is usable for high frequency design (I was concerned with its viability since most people use Altium). ...
How ARM computers boot: My experience modifying the Raspberry Pi boot sequence
What’s this blog about? Lately, I’ve been quite interested on the hardware side of computer systems, and since all open-source SBCs that I can find are all ARM-based, I guess it is time to learn how ARM-based computers boot. Since I already have a Raspberry Pi (Rpi) laying around, I thought it might be a good idea to use it as a practice - by default, Rpi uses proprietary bootloaders. So to test my understanding, I’ll try to modify its boot sequence using open-source embedded firmware, namely u-boot. ...
HTTP servers from scratch: how to make your own (simple) server without using NodeJS or Apache
What’s this blog about? With final exams approaching, I cannot spend too much time learning outside of class. So I’ve been wondering, what are some projects that I can do that doesn’t take too much time? Since I’ve been writing blogs recently, I had to think up of a way on how to publish it on the internet. What I came up with was nginx as reverse proxy that serves the static files under /srv directory. ...
Taylor Series: How I used math (and SIMD paradigm) to make my code run 9x faster
What’s this blog about? In this blog, I’ll be sharing one of the assignments I did in my parallel programming course, taught by the great Professor Xu Weizhong of CUHK-SZ. This blog will be divided into three parts: what the assignment was about, what I was taught in class to make my code run faster, and what I did to further optimize my code to ultimately make it run 9x faster. ...